2013-06-19 8 views
5

Ich habe folgende Einheit:JPA @ManyToOne, mit zusätzlicher Bedingung

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

    public User() { 
    } 

    // ... 
} 

Ist es irgendwie möglich, eine zusätzliche Voraussetzung für die oben kommt Beziehung angeben? Group ist hierarchisch und User sollte sich immer auf die übergeordnete Gruppe beziehen, also wäre die zusätzliche Bedingung parent_group == NULL. Beachten Sie, dass code selbst nicht eindeutig ist. Hier

ist die Gruppe:

@Entity 
public class Group { 
    // ... 

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

    public Group() { 
    } 

    // ... 
} 

Antwort

4

Bitte versuchen Sie es zu Hibernate's@filter Anmerkung hinzuzufügen. Ich bin mir nicht bewusst das ganze Schema, aber es könnte sein:

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

Bei EclipseLink könnte die Lösung getrennte ParentGroup Einheit zu besitzen, sein. Dann können Sie es mit @AdditionalCriteria Annotation markieren und das Mapping mit User und einfach Group einrichten.

0

Das @Filter Attribut mit Einheit nicht funktioniert, es funktioniert mit Sammlung

try wie dieser

@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; 
Verwandte Themen