次の質問があります。3 つのエンティティがあり、OneToOne 単方向を使用しています。
エンティティ1
@Entity
public class Entity1 implements Serializable{
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
Long id;
String name;
String value;
}
エンティティ 2
@Entity
public class Entity2 implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@OneToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST})
Entity1 entity1;
public Entity1 getEntity1() {
return entity1;
}
String name;
String value;
}
エンティティ3
@Entity
public class Entity3 implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
Long id;
@OneToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST})
private Entity1 entity1;
public Entity1 getEntity1() {
return entity1;
}
public void setEntity1(Entity1 entity1) {
this.entity1 = entity1;
}
String name;
String value;
}
小さなテスト:
public void testApp()
{
EntityManager em = TestHibernateUtil.getEntityManager();
em.getTransaction().begin();
Entity1 entity1 = new Entity1();
entity1.name = "Name1";
entity1.value = "Value1";
Entity2 entity2 = new Entity2();
entity2.name = "Name2";
entity2.value = "Value2";
entity2.setEntity1(entity1);
**em.merge(entity2);**// if change that to persist - I get one Entity1
Entity3 entity3 = new Entity3();
entity3.name = "Name3";
entity3.value = "Value3";
entity3.setEntity1(entity1);
**em.merge(entity3);** // if change that to persist - I get one Entity1
em.getTransaction().commit();
}
したがって、上記のテストを調べるとem.merge
、トランザクションのコミット後に永続コンテキストで Entity1 の 2em.persist
つのエンティティを取得する場合は、永続コンテキストで Entity1 のエンティティを 1 つ取得します。誰かがなぜそれが起こるのか説明したり、いくつかのドキュメントを指摘したりできますか?