2010-05-10 26 views
6

Tôi muốn kết hợp 2 thực thể bằng cách sử dụng chú thích hibernate với một điều khoản tham gia tùy chỉnh. Điều khoản này là bình đẳng FK/PK thông thường, nhưng cũng là nơi FK là null. Trong SQL này sẽ là một cái gì đó như:Hibernate tùy chỉnh tham gia khoản trên hiệp hội

join b on a.id = b.a_id or b.a_id is null 

Từ những gì tôi đã đọc tôi nên sử dụng các chú thích @WhereJoinTable trên thực thể chủ sở hữu, nhưng tôi bối rối về cách tôi xác định tình trạng này ... đặc biệt là phần đầu tiên của nó - đề cập đến id của thực thể tham gia.

Có ai có ví dụ không?

+0

Nếu b.a_id là null thì nó thuộc về mọi đối tượng là a? –

+0

có tất cả các đối tượng của 'a' sẽ có 'b' trong đó b.a_id là null – mysomic

Trả lời

18

Dưới đây là ví dụ sử dụng mô hình chuẩn/con chuẩn mà tôi cho rằng sẽ hoạt động bằng cách sử dụng chú thích @Where cơ bản.

public class A { 
    ... 
    @ManyToOne(fetch = FetchType.EAGER) // EAGER forces outer join 
    @JoinColumn(name = "a_id") 
    @Where(clause = "a_id = id or a_id is null") // "id" is A's PK... modify as needed 
    public B getB() { return b; } 

} 

public class B { 
    ... 
    @OneToMany(mappedBy = "b") 
    public List<A> getA() { return a; } 
} 
+0

Có một giải pháp tương tự cho EclipseLink không? – Huntro

+0

Không, nhưng bạn có thể sử dụng DescriptorCustomizer http://wiki.eclipse.org/EclipseLink/Examples/JPA/MappingSelectionCriteria –

Các vấn đề liên quan