Java Hibernate在合并后复制对象

Java Hibernate在合并后复制对象,java,swing,hibernate,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<Enti

我有两个双向关系的对象

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的JTable中有两行。如果我删除:

Entity2HibernateDao dao = new  Entity2HibernateDao();
dao.save(entity2);
Entity1数据库中会刷新Entity1的其他属性,但Entity2当然没有记录。 我还尝试使用update()而不是merge(),但也不起作用。 我是否正确连接了Entity1和Entity2的引用?还是别的什么?
谢谢。

如果您使用
标准
findByCriteria()
默认情况下,它将创建与数据库行数相等的父级数。假设您有一个父项和两个子项,当您使用left join查询数据库时,您将能够看到两行作为输出。Hibernate把它们放进pojo里

您需要将结果包装到
集合中

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

将为您提供所需的结果。

您还需要调用
entity2.setEntity1(entity1)session.list()
将它们包装成
集合
。让我们看看dao对象。如果您使用的是
标准
,则需要添加
distinct
子句。类似于
criteria.setResultTransformer(criteria.DISTINCT\u ROOT\u ENTITY)的东西
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);