2012-06-11 23 views
6

Tôi có hai thực thể A và B.Hibernate @JoinFormula

public class A{ 

    @Id 
    @GeneratedValue 
    private Integer id; 

    private String uuid; 

    ... 
    } 

Các UUID được đưa ra bên ngoài; ID có thể được xem như là phiên bản.

Bây giờ, tôi muốn tham chiếu A trong B sao cho tôi có uuid được lưu trữ trong B và tự động chọn A có uuid theo và id cao nhất.

Những gì tôi cố gắng là:

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; 

     ...   
} 

này sẽ tạo ra một cột chứa id của một trong B và ném một ngoại lệ nếu tôi cố gắng tồn tại một đối tượng. Tôi cũng đã thử @JoinColumnsOrFormulas mà không có may mắn.

Ai đó có thể cho tôi một gợi ý về cách thực hiện điều này (trong Hibernate 3.5 btw) không?

Cảm ơn!

Trả lời

9

Các công trình sau đây:

@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

Chấp nhận nó để mọi người có thể thấy rằng công trình này. – ssedano

+3

Vâng. Nó được chấp nhận. Nhưng nó có dự tính gì không? Làm thế nào điều này chọn id cao nhất ở đây? –