我有两个双向关系的对象。
public class Entity1 extends AbstractEntity implements Serializable{
...
//bi-directional many-to-one association to Entity2
@OneToMany(mappedBy="entity1", fetch=FetchType.EAGER)
private Set<Entity2> entityTwos = new HashSet<Entity2>();
}
public class Entity1 extends AbstractEntity implements Serializable{
...
//bi-directional many-to-one association to Entity1
@ManyToOne
@JoinColumn(name="N_ENTITY1")
private Entity1 entity1;
}
所以当我修改Entity1并执行此操作时:
Entity2 entity2 = new Entity2();
entity2.setValue("I");
entity2.setDate(new Date());
entity1.addEntityTwo(entity2);
Entity2HibernateDao dao = new Entity2HibernateDao();
dao.save(entity2);
getEnitity1Dao().merge(nalog);
在数据库中一切正常,但在重新启动应用程序之后,我的JTable for Entity1中有两行。如果我删除:
Entity2HibernateDao dao = new Entity2HibernateDao();
dao.save(entity2);
Entity1的Entity1其他属性在数据库中刷新,但当然没有Entity2的记录。 我也尝试使用update()而不是merge(),但它也不起作用。 我是否正确连接了Entity1和Entity2的引用?或者是别的什么? 感谢。
答案 0 :(得分:1)
如果您使用Criteria
默认情况下findByCriteria()
,则会创建等于数据库行数的父项数。假设您有一个父项和两个子项,当您使用左连接查询数据库时,您将能够看到两行作为输出。 Hibernate只是将它们放入pojo中。
您需要将结果包装成set
或
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
会给你想要的结果。