2016-06-24 162 views
0

设置缺失的参数为空当我尝试将我的对象之一,休眠检测缺少我的目标对象的属性,并设置相对于空 我的数据库组成:休眠:插入数据在数据库

Hall  Usine  Users_Usines User 
    hallID usineID  userID   userID 
    usineID    usineID 

为了创建一个大厅,我使用:

hall = mapper.readValue(hallData, Hall.class); 
long res = hallDAO.create(hall); 

而且这是在DAO执行的代码是:

Session session = HibernateUtil.getCurrentSession(); 
Transaction transaction = session.beginTransaction(); 
int id = (int) session.save(object); 
transaction.commit(); 
session.clear(); 
session.close(); 
HibernateUtil.closeCurrentSession(); 

我的问题是我的大厅有一个“Usine”,但我的“Usine”的“用户”属性丢失,所以休眠设置我的Users_Usines表为空。

我修改了我自己写的语句而不是使用session.update(object)的类似问题,但是我看到INSERT语句不支持INSERT VALUES格式。

如何解决?谢谢!

回答

1

这个问题似乎不是休眠相关的,而是你如何从mapper填充你的Hall对象的产品,我认为它可能是某种类型的JSON库。

您是否确认hallData包含在hibernate插入数据时在数据库级别形成该关系所需的所有相关信息?这似乎不是从迄今为止所显示的。

每当您收到此hallData时,如果您打算在数据库中创建一个全新的Hall实例,它必须是绝对完整的。 Hibernate只知道你提供的信息,所以没有它,这种关系就不能建立。

如果hallData是局部的,你的目的是UPDATE现有记录,那么你就需要先装入从数据库中Hall,合并您从映射器读取到该实例的变化,然后调用save。这将有效维护现有状态并仅更改hallData中提供的字段。

+0

实际上,霍尔实体的hallData是完整的。这是他的属性“Usine”,其中只包含“usineID”而不包含“用户”属性,所以休眠更新数据库表“users_usines”并删除其中的所有记录。 – xNeyte

+0

直接属性可能被填充;然而,通过_complete_,我的意思是对象图被填充,以便当Hibernate级联发生变化时,它们被正确应用;因此一个_complete对象graph_。 – Naros