Hibernate在合并后复制对象

时间:2014-01-21 23:19:53

标签: java swing hibernate

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

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的引用?或者是别的什么? 感谢。

1 个答案:

答案 0 :(得分:1)

如果您使用Criteria默认情况下findByCriteria(),则会创建等于数据库行数的父项数。假设您有一个父项和两个子项,当您使用左连接查询数据库时,您将能够看到两行作为输出。 Hibernate只是将它们放入pojo中。

您需要将结果包装成set

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

会给你想要的结果。