JPA @ManyToOne,附加条件

时间:2013-06-19 13:34:21

标签: java jpa

我有以下实体:

@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 () {
    }

    // ...
}

3 个答案:

答案 0 :(得分: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设置映射。

答案 1 :(得分:1)

您需要使用DescriptorCustomizer并将代码添加到代码中的映射

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

答案 2 :(得分: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;