Java 如何在Hibernate中进行映射
我使用没有spring的hibernate,在映射方面有问题。 我有两个实体,User和Enquête,映射代码如下: 恩奎特:Java 如何在Hibernate中进行映射,java,hibernate,mapping,Java,Hibernate,Mapping,我使用没有spring的hibernate,在映射方面有问题。 我有两个实体,User和Enquête,映射代码如下: 恩奎特: @ManyToOne(fetch = FetchType.LAZY) @Cascade(org.hibernate.annotations.CascadeType.ALL); private User responsable; 在用户中: 关于Enquête什么都没有,因为目前还没有地图 当我试图拯救这样一个新的恩奎特时: private static void
@ManyToOne(fetch = FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.ALL);
private User responsable;
在用户中:
关于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();
}
}
我有一个错误:
错误:HH000346:托管刷新期间出错[行被另一个事务更新或删除,或者未保存的值映射不正确:[Model.User1]]
PS:这是我在代码中使用hibernate的第一个操作,因此我认为这与另一个事务无关。最有可能的是,您作为参数传递的用户已在另一个事务中检索并分离
尝试先合并该实体,然后执行保存:
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上使用标准JPA手机Hi。我认为用户id也必须保存。尝试将注释@joinColumn添加到用户字段。