JPA @ManyToOne,附加条件

7

我有如下实体:

@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个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
5
请尝试添加Hibernate的@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

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

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,