HQL - 更新地图中的@Embeddable对象

时间:2015-12-31 11:49:13

标签: hibernate jpa hql

我有一个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行。

0 个答案:

没有答案
相关问题