0

我有一个可以扩展的通用类和可以扩展的通用子成员。我试图让 SpecialGroupMember 中的组引用成为 SpecialGroup 而不是“Group”,主要是因为在 Hibernate HQL 中我想根据 SpecialGroup 的特殊属性选择 SpecialGroupMembers。在下面的配置中,Hibernate 会在下面的查询中抛出错误

from SpecialGroupMember sgm inner join sgm.group grp where grp.special = true;



public class Group<T extends GroupMember>{
    private List<T> members;
}

public class SpecialGroup extends Group<SpecialMember>{
    private boolean special;
}

public class GroupMember{

    private Group<? extends GroupMember> group;
}

public class SpecialGroupMember extends GroupMember{
    private boolean something;
}

任何建议如何以有意义的方式进行设置?

4

1 回答 1

1

特殊属性需要存在于 Group to 中(可能设置为 false)才能通过 Group 进行选择。由于 GroupMember 中的属性是 Group 而不是 SpecialGroup,因此只能访问 Group 类的属性。

public class Group<T extends GroupMember>{
    protected boolean special = false;
    private List<T> members;
}

public class SpecialGroup extends Group<SpecialMember>{
     public SpecialGroup() {
         special = true;
}

public class GroupMember{

    private Group<? extends GroupMember> group;
}

public class SpecialGroupMember extends GroupMember{
    private boolean something;
}

虽然 Hibernate 或任何其他 ORM 框架的主要用例之一是为数据库对象提供继承之类的东西,但在我看来,它在这方面并不是很好。在大多数情况下,尝试使用此功能超出文档中描述的范围将导致噩梦。

于 2013-05-03T21:25:40.867 回答