我有以下实体:
@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
有没有人在此查询中发现错误?
感谢任何帮助。
答案 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)