0

私は次のクラスを持っています:

@Entity
public class ClassA {
  @Column
  @Id
  private Long id;
  @ManyToOne(cascade = javax.persistence.CascadeType.ALL)
  @JoinColumn...
  private ClassB classB;
  public ClassA(ClassB classB){
    this.classB = classB;
  }
  //....
  //....
}

@Entity
public class ClassB {
  @Column
  @Id
  private Long id;

  @Column(unique=true) //important
  private String name;
  public ClassB(String name){
    this.name = name;
  }
  //....
  //....
}

まだ存在しない場合にのみ保存してClassA保存したい。ClassBClassB

ClassB b = new ClassB("myName");
ClassA a = new ClassA(b);
session.merge(a); // fine
ClassA a2 = new ClassA(b);
session.merge(a2); // problem with b

もちろんClassB、存在するかどうかを確認してロードすることはできますが、より効率的に実行したいと考えています。

4

1 に答える 1

1

classB が存在し、classB が管理されている場合、getEntityManager.contains(b) は true を返します。

ClassB b = new ClassB("myName");

    if(getEntityManager.contains(b)){
   ClassA a = new ClassA(b)
    session.merge(a);
    }
   else{
    session.merge(b);
    ClassA a = new ClassA(b)
    session.merge(b);
     }
于 2012-09-13T19:24:55.070 に答える