我有两个处于双向关系的对象。

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);


会给您想要的结果。

07-26 08:54