JPQL查询更新CollectionTable

时间:2013-03-17 11:22:19

标签: dictionary jpa entity jpql

我有以下实体:

@Entity(name = "Directory")
@Table(name = "Directory")
public Directory {

@Id
@Column(name = "id")
protected String id;

@ElementCollection
@MapKeyColumn(name = "file")
@CollectionTable(name = "Directory_Files", joinColumns = @JoinColumn(name = "id"))
@Column(name = "hash")
protected Map<File, String> fileToHash;

...

}

应使用JPQL查询更新目录文件的哈希值。

我尝试了以下查询,但它不起作用:

UPDATE Directory t SET t.Directory_Files.hash = :hash WHERE t.Directory_Files.id = :id AND t.Directory_Files.file = :file

有没有人在此查询中发现错误?

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

“Directory_Files”是一个数据库表,在您的对象模型中不存在,因此无法在JPQ中使用 - 您需要访问目录中的fileToHash Map

不幸的是,JPQL批量更新语句将更新项定义为: update_item :: = [identification_variable。] {single_valued_embeddable_object_field。} * {state_field | single_valued_object_field} = new_value

fileToHash是一个集合,因此不能在Update语句中使用。

您需要使用SQL查询并将其传递给EntityManager.createNativeQuery(sqlString)