我使用hibernate(没有spring),并且我有一个关于映射的问题。 我有 2 个实体,“User”和“Enquête”,具有以下映射代码:
结束:
@ManyToOne(fetch = FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.ALL);
private User responsable;
在用户中:
(没有关于 Enquête 的信息,因为目前没有“映射者”)
当我尝试保存一个新的“Enquête”时:
private static void addEnqueteInBdd(String titre,Date dateCreation,Date dateFermeture,Boolean cloture,int idEnquete,Formulaire formulaire,User responsable,List<Collecte> collectes) {
Transaction transaction = null;
Enquete en = null;
Session session = HibernateUtil.getSessionFactory().openSession();
try {
transaction = session.beginTransaction();
en = new Enquete( titre, dateCreation, dateFermeture, cloture, collectes, formulaire,responsable );
session.save(en);
transaction.commit();
} catch (Exception e) {
e.printStackTrace();
if (transaction != null) {
transaction.rollback();
}
e.printStackTrace();
}
}
我有这个错误:
错误:HHH000346:托管刷新期间出错 [行已被另一个事务更新或删除(或未保存值映射不正确):[Model.User#1]]
PS:这是我在代码中使用 hibernate 的第一个操作,因此我认为这与其他事务无关。
最佳答案
很可能您作为参数传递的User
已在另一个事务中检索并已分离。
首先尝试合并该实体,然后执行保存:
try {
User responsableMerged = session.merge(responsable);
transaction = session.beginTransaction();
en = new Enquete( titre, dateCreation, dateFermeture,
cloture, collectes, formulaire,responsableMerged );
session.save(en);
transaction.commit();
}
也不要使用 Hibernate 特定的级联。在 MAnyToOne
关于java - 如何在 Hibernate 中进行映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57354688/