我有一个JPA实体,它包含另一个嵌入实体的地图。 它看起来像这样: @Entity
public class ParentEntity {
@Id
@Column(name = "ID", nullable = false)
private Long id;
[...columns ...]
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "EMBEDDED_ENTITY", joinColumns =@JoinColumn(name = "PARENT_ID"))
@MapKeyColumn(name = "MAP_KEY")
private Map<Long, EmbeddedEntity> embeddedEntities;
@Column(name = "STATUS", nullable = false)
private int status;
}
@Embeddable
public class EmbeddedEntity{
@Column(name = "SOME_VALUE", nullable = false)
private String someValue;
}
这样做很好,当我选择ParentEntity时,我会按预期在地图中获取EmbeddedEntities。 现在我正在尝试编写一个HQL更新,它实际上会更新&#34; someValue&#34;具有特定键的嵌入式实体的列。我试过了:
update ParentEntity set embeddedEntities[?1].someValue= ?2 where status = ?3
但这引起了例外,那就是&#34; [&#34;性格出乎意料。所以我把它改成了:
update ParentEntity set embeddedEntities.someValue= ?2 where status= ?3 and index(embeddedEntities) = ?1
看起来合法;但我得到了一个例外
Caused by: org.hibernate.QueryException: could not resolve property: someValue of: ParentEntity
哪个简单告诉我hibernate不理解这个想法,因为我说它需要更新&#34; someValue&#34; embeddedEntities属性(map)而不是&#34; someValue&#34; ParentEntity本身的字段。
我通过HQL实现的目标是什么?选择并更改代码中的值并不是主意,因为数据库中可能有数千个EmbeddedEntity行。