2013-03-17 70 views
0

我有以下實體:JPQL查詢更新CollectionTable

@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

「Directory_Files」是一個數據庫表,並在你的對象模型不存在,因此不能在JPQ使用 - 您將需要目錄內訪問fileToHash地圖

不幸的是JPQL批量更新語句定義更新條目: update_item :: = [identification_variable。] {single_valued_embeddable_object_field。} * {state_field | single_valued_object_field} = new_value

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

你需要使用一個SQL查詢,並把它傳遞給EntityManager.createNativeQuery(的SqlString)

+0

難道就沒有別的辦法通過JPQL訪問地圖?我的代碼中的所有其他查詢都基於JPQL,我希望保持一致。 – user1056903 2013-03-18 16:52:10