2012-06-11 12 views
6

私はUUIDが外部から与えられた2つのエンティティAとB休止@JoinFormula

public class A{ 

    @Id 
    @GeneratedValue 
    private Integer id; 

    private String uuid; 

    ... 
    } 

を持っています。 IDはバージョンとして見ることができます。

ここで、私はBの中のAを参照して、私がBに格納されているuuidを持っていて、自動的に、その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で)これを行う方法のヒントを教えてもらえますか?

ありがとうございます!

答えて

9

次作品:人々は、これが動作することを確認できるように

@ManyToOne 
@JoinColumnsOrFormulas({ 
    @JoinColumnOrFormula([email protected](value="(SELECT a.id FROM A a WHERE a.uuid = uuid)", referencedColumnName="id")), 
    @JoinColumnOrFormula(column = @JoinColumn("uuidOfA", referencedColumnName="uuid")) 
}) 
private A a; 
+0

はそれを受け入れます。 – ssedano

+3

うん。それは受け入れられる。しかし、それは何を期待していますか?この人はここでどのように最高のIDを選ぶのですか? –