gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:37:18 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com