2013-06-19 2 views
5

와 I가 다음 엔티티 :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으로 매핑을 설정할 수 있습니다. @Filter 속성이 단일 엔티티 작동하지 않습니다

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

당신은 DescriptorCustomizer를 사용하여 코드에 매핑 식을 추가 할 필요가