2013-06-19 56 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

注釈@Filter Hibernate'sを追加してみてください。私は、全体のスキーマを認識していないですが、それは次のようになります。

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

EclipseLinkの場合では、溶液は、別々のParentGroupエンティティを持っている可能性があります。 @AdditionalCriteriaアノテーションでマークし、Userと簡単なGroupでマッピングを設定できます。あなたは@Filter属性が単一のエンティティでは動作しませんDescriptorCustomizerを使用すると、コード内のマッピングに

http://wiki.eclipse.org/EclipseLink/Examples/JPA/MappingSelectionCriteria

1

、 それはコレクション

試みで動作しますこのように

@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; 
0

を式を追加する必要が