我有一个可以扩展的泛型类和可以扩展的泛型子成员。 我试图让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;
}
有任何建议如何以有意义的方式进行设置?
答案 0 :(得分:1)
特殊属性需要在Group中出现(可能设置为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框架的一个主要用例是向数据库对象提供继承之类的东西,但在我看来,它并不是很擅长。在大多数情况下,试图将此功能用于文档中描述的内容将导致噩梦。