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)实际上,我在addEntityTwo()方法中生成了这段代码,其中已经有一行:entity2.setEntity1(this),所以我认为这不是问题所在,因为它在数据库中正确添加,但我认为对象在会话中是重复的。不管怎样,谢谢你。你是如何加载它们的?如果您使用的列表类似于session.list()
将它们包装成集合
。让我们看看dao对象。如果您使用的是标准
,则需要添加distinct
子句。类似于criteria.setResultTransformer(criteria.DISTINCT\u ROOT\u ENTITY)的东西代码>
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);