当我尝试插入我的一个对象时,hibernate检测到对象中缺少对象的属性,并将关系设置为null 我的数据库由以下内容组成:
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"缺少所以hibernates将我的Users_Usines表设置为空。
我通过自己编写语句而不是使用session.update(object)修复了我的更新中的类似问题,但我看到INSERT语句不能支持INSERT VALUES格式。
如何解决?谢谢!
答案 0 :(得分:1)
问题似乎与hibernate无关,而是你如何从Hall
填充mapper
对象的产品,我认为这可能是某种类型的JSON库。
您是否已确认hallData
包含在hibernate插入数据时在数据库级别形成该关系所需的所有相关信息?这似乎不是迄今为止所显示的内容。
每当您收到此hallData
时,如果您的意图是在数据库中创建全新的Hall
实例,那么它必须是绝对完整的。 Hibernate只知道你提供的信息,所以没有它,就无法建立这种关系。
如果hallData
是部分的,并且您的意图是UPDATE
现有记录,那么您需要首先从数据库加载Hall
,合并您的更改从映射器读取到实例中,然后调用save
。这将有效地维护现有状态,并仅更改hallData
中提供的字段。