我在創建自定義查詢時遇到問題。如何爲CollectionOfElements創建自定義查詢
這是實體的:
@Entity
public class ApplicationProcess {
@CollectionOfElements
private Set<Template> defaultTemplates;
//more fields
}
而且Template.java
@Embeddable
@EqualsAndHashCode(exclude={"used"})
public class Template implements Comparable<Template> {
@Setter private ApplicationProcess applicationProcess;
@Setter private Boolean used = Boolean.valueOf(false);
public Template() {
}
@Parent
public ApplicationProcess getApplicationProcess() {
return applicationProcess;
}
@Column(nullable = false)
@NotNull
public String getName() {
return name;
}
@Column(nullable = true)
public Boolean isUsed() {
return used;
}
public int compareTo(Template o) {
return getName().compareTo(o.getName());
}
}
我想創建一個更新語句。我曾嘗試這兩個:
int v = entityManager.createQuery("update ApplicationProcess_defaultTemplates t set t.used = true " + "WHERE t.applicationProcess.id=:apId").setParameter("apId", ap.getId())
.executeUpdate();
ApplicationProcess_defaultTemplates is not mapped [update ApplicationProcess_defaultTemplates t set t.used = true WHERE t.applicationProcess.id=:apId]
我試圖
int v = entityManager.createQuery("update Template t set t.used = true " + "WHERE t.applicationProcess.id=:apId").setParameter("apId", ap.getId())
.executeUpdate();
用了同樣的錯誤:
Template is not mapped [update Template t set t.used = true WHERE t.applicationProcess.id=:apId]
任何想法?
UPDATE
我固定它通過創建本地查詢
int v = entityManager.createNativeQuery("update ApplicationProcess_defaultTemplates t set t.used=true where t.ApplicationProcess_id=:apId").setParameter("apId", ap.getId()).executeUpdate();