Java泛型子类对父类的反向引用/选择子类属性

Java泛型子类对父类的反向引用/选择子类属性,java,generics,hql,Java,Generics,Hql,我有一个可以扩展的泛型类和可以扩展的泛型子成员。 我试图使SpecialGroupMember中的组引用成为SpecialGroup而不是“group”,主要是因为在Hibernate HQL中,我希望根据SpecialGroup的特殊属性选择SpecialGroupMembers。在下面的配置中,Hibernate将在以下查询中抛出一个错误 from SpecialGroupMember sgm inner join sgm.group grp where grp.special = true

我有一个可以扩展的泛型类和可以扩展的泛型子成员。 我试图使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;
}
来自SpecialGroup成员sgm内部连接sgm.group grp,其中grp.special=true;
公共课组{
非公开名单成员;
}
公共类SpecialGroup扩展组{
私有布尔特殊;
}
公共类组成员{

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

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;
}
公共类组{
受保护的布尔特殊=false;
非公开名单成员;
}
公共类SpecialGroup扩展组{
公共特殊组(){
特殊=真实;
}
公共类组成员{
私人团体