2013-06-19 51 views
5

我有以下實體:JPA @ManyToOne,有附加條件

@Entity 
public class User { 
    @ManyToOne 
    @JoinColumn(name = "group_code", referencedColumnName = "code") 
    private Group group; 

    public User() { 
    } 

    // ... 
} 

是否有可能以某種方式指定上述連接關係的附加條件? Group是分層結構,並且User應始終引用父組,因此附加條件將爲parent_group == NULL。請注意,code本身並不是唯一的。

下面是組:

@Entity 
public class Group { 
    // ... 

    @ManyToOne 
    @JoinColumn(name = "parent_package_code") 
    private Group parent; 

    public Group() { 
    } 

    // ... 
} 

回答

4

請儘量添加Hibernate's@Filter註解。我不知道整個架構,但它可能是:

@ManyToOne 
@JoinColumn(name = "group_code", referencedColumnName = "code") 
@Filter(name="parentGroup",condition="parent_group IS NULL") 
private Group group; 

EclipseLink情況下,解決方案可能是有單獨的ParentGroup實體。然後您可以用@AdditionalCriteria註釋標記它,並使用User和簡單的Group設置映射。

0

@Filter屬性不符合單一實體工作, 它與收集

試像這樣

@OneToMany(targetEntity = DefaultPortFloatingAddress.class) 
    @JoinTable(name="JCI_PORT_FLOATING_ADDRESS",joinColumns = {@JoinColumn(name="FLOATING_IP_ID", referencedColumnName = "floatingip_id")}, inverseJoinColumns = {@JoinColumn(name="PORT_FLOATING_ADDRESS_ID")}) 
    //@Where(clause="status='A'") 
    @Filter(name="status", condition="A") 
    private List<PortFloatingAddress> listPortFloatingAddress;