我在Hibernate管理实体中有以下两个字段:
@ElementCollection(targetClass = PersonAttributes.class, fetch = FetchType.EAGER)
@Enumerated(EnumType.STRING)
@CollectionTable(name = "PERSON_ATTRIBUTES", joinColumns = { @JoinColumn(name = "PERSON_ID") })
@Column(name = "ATTRIBUTES")
private List<PersonAttributes> attributes;
@ElementCollection(targetClass = PersonRoles.class, fetch = FetchType.EAGER)
@Enumerated(EnumType.STRING)
@CollectionTable(name = "PERSON_ROLES", joinColumns = { @JoinColumn(name = "PERSON_ID") })
@Column(name = "ROLES")
private List<PersonRoles> roles;
当我选择两个PersonAttributes
值和两个PersonRoles
值并保持实体时,在从数据库中读取它时,值会交叉乘法。
示例:
持久角色= [ADMIN, SUPERVISOR]
和属性= [ATTRIBUTE1, ATTRIBUTE2]
。在从数据库中读取实体时,我得到角色= [ADMIN, SUPERVISOR, ADMIN, SUPERVISOR]
和属性= [ATTRIBUTE1, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE2]
。
另一个例子:
持久角色= [ADMIN]
和属性= [ATTRIBUTE1, ATTRIBUTE2]
。
在从数据库中读取实体时,我得到角色= [ADMIN, ADMIN]
和属性= [ATTRIBUTE1, ATTRIBUTE2]
。
看起来有一些意想不到的加入?如何在没有这种交叉乘法的情况下让Hibernate读取持久化的枚举?
其他信息:当我使用entityManager.find()
方法时会发生这种情况。但是当我通过JPQL SELECT语句将所有实体作为列表时,枚举是合适的。
答案 0 :(得分:1)
请看这个答案@OneToMany List<> vs Set<> difference。
您无法在实体中检索多个Observable<List<A>> getAFromServer();
Observable<List<B>> getBFromServer(@Body A.a);
。如果您想为您的实体添加多个List<A> listA = getAFromServer();
foreach(A a: listA){
getBFromServer(a.a)
}
,请使用 java.util.List
而不是java.util.Set
。