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

标签 java generics hql

我有一个可以扩展的通用类和可以扩展的通用子成员。 我试图使 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;
}

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

最佳答案

特殊属性需要存在于组中(可能设置为 false)才能通过组进行选择。由于 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 框架的主要用例之一是提供诸如数据库对象继承之类的功能,但在我看来,它在这方面并不是很擅长。在大多数情况下,尝试使用此功能超出文档中描述的范围将导致一场噩梦。

关于Java泛型子反向引用父级/选择子类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16366908/

相关文章:

c - 在 _Generic 之前,C 对 main 的不同签名是如何支持的?

java - 使用父类(super class)作为引用而不是子类?

java - 检测音频输入的频率 - Java?

Java - 修剪换行符后的字符串

java - 如何在 Java 中创建包含泛型的自定义类数组

java - 一对多关系在不使用 "distinct"的情况下获取重复对象。为什么?

java - 使用 Hibernate 映射到实体 id

java - HQL 中的 Left Join - Hibernate 查询

java - onClick Back 按钮重置我的 ListView

java - 不读取文件