0

我有以下实体:

@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

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

任何帮助表示赞赏。

4

1 回答 1

0

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

不幸的是,JPQL 批量更新语句将更新项目定义为:update_item ::= [identification_variable.]{single_valued_embeddable_object_field.}* {state_field | 单值对象字段} = 新值

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

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

于 2013-03-18T13:01:58.353 回答