我想要一个集合字段来使用查询,但我找不到办法。有一个@Formula
注释,但不适用于集合。你可能会问我为什么不使用@ManyToMany
或类似的注释。问题是,我有一个表(例如,称为关系),其列与此类似:
ID | ChildType | ChildID | ParentType | ParentID |
现在,ChildType 和 ParentType 可以是我的应用程序中的许多类之一,因此我不能(我不想)使用@ManyToMany
映射,因为它会为每个类创建另一个表。我想要的是,在 A 类中有一个名为关系的集合字段,它将从关系表中选择所有行(关系)where ChildID = A.id and ChildType = 'A'
。那可能吗?
更新:看起来我还不够清楚。好吧,比如说,我有一个类关系,其中ParentType
和ChildType
只是父子类的类名作为字符串:
@Entity
public class Relationship {
@Id
@GeneratedValue
private Long id;
@Enumerated(EnumType.STRING)
private ParentType parentType;
private Long parentId;
@Enumerated(EnumType.STRING)
private ParentType childType;
private Long childId;
}
然后我有各种各样的类relationships
,比如:
@Entity
public class A {
@Id
@GeneratedValue
private Long id;
private Set<Relationship> relationships = new HashSet<Relationship>();
}
@Entity
public class B {
@Id
@GeneratedValue
private Long id;
private Set<Relationship> relationships = new HashSet<Relationship>();
}
@Entity
public class C {
@Id
@GeneratedValue
private Long id;
private Set<Relationship> relationships = new HashSet<Relationship>();
}
现在我希望 Hibernate 查询Relationships
表以查找每个类的关系,A
, B
,以及C
每当我获得相应类的实例 bean 时。像这样的东西:
@Query("(select relationship from Relationship relationship where relationship.childId = id and relationship.childType = 'A')")
private Set<Relationship> relationships = new ArrayList<Relationship>();