我有两个处于双向关系的对象。
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中有两行用于Entity1。如果我删除:
Entity2HibernateDao dao = new Entity2HibernateDao();
dao.save(entity2);
在数据库中刷新了Entity1的Entity1其他属性,但是当然没有Entity2的记录。
我也尝试了update()而不是merge(),但是它也没有用。
我是否正确连接Entity1和Entity2的引用?或者是别的什么?
谢谢。
最佳答案
如果默认情况下像Criteria
一样使用findByCriteria()
,它将创建的父级数等于数据库行数。可以说,如果您有一个父级和两个子级,则在使用左联接查询数据库时,将能够看到两行作为输出。 Hibernate只是将它们放入pojo中。
您需要将结果包装到set
中,或者
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
会给您想要的结果。