9

私は2つのエンティティAとBを持っています.

 public class A{

    @Id
    @GeneratedValue
    private Integer id;

    private String uuid;

    ...
  }

UUID は外部から与えられます。IDはバージョンとして見ることができます。

ここで、B で A を参照して、UUID を B に格納し、それに応じた UUID と最高の ID を持つ A を自動的に選択するようにします。

私が試したのは:

public class B{
      @Id 
      @GeneratedValue
      private Integer id;

      private String uuidOfA;

      @ManyToOne
      @JoinFormula(value="SELECT a.id FROM A a WHERE v.uuid = uuidOfA AND v.id = (SELECT max(x.id) FROM A x WHERE x.uuid = v.uuid)", referencedColumnName="id")
      private A a; 

      ...        
}

これにより、B に A の ID を含む列が作成され、オブジェクトを永続化しようとすると例外がスローされます。@JoinColumnsOrFormulas も試してみましたが、うまくいきませんでした。

誰かがこれを行う方法についてのヒントを教えてもらえますか (Hibernate 3.5 btw)?

ありがとう!

4

1 に答える 1

17

以下の作品:

@ManyToOne
@JoinColumnsOrFormulas({
  @JoinColumnOrFormula(formula=@JoinFormula(value="(SELECT a.id FROM A a WHERE a.uuid = uuid)", referencedColumnName="id")),
  @JoinColumnOrFormula(column = @JoinColumn("uuidOfA", referencedColumnName="uuid"))
})
private A a;
于 2012-06-12T06:07:16.123 に答える