【发布时间】:2020-02-17 21:20:30
【问题描述】:
我得到这个异常被映射到数据库中的主键列。不允许更新
我想要实现的答案就像https://stackoverflow.com/a/39680764/811293基于这篇文章:https://thoughts-on-java.org/criteria-updatedelete-easy-way-to/
我的问题是:
Table_A
PRODUCT_CODE_A VARCHAR2(10) NOT NULL
...
CONSTRAINT Table_A_PK PRIMARY KEY (PRODUCT_CODE_A) ENABLE
Table_B
PRODUCT_CODE_B VARCHAR2(10) NOT NULL
PRIORITY_B INTEGER NOT NULL
...
CONSTRAINT Table_B_FK FOREIGN KEY (PRODUCT_CODE_B) REFERENCES Table_A (PRODUCT_CODE_A)
CONSTRAINT Table_B_PK PRIMARY KEY (PRODUCT_CODE_B, PRIORITY_B)
现在我想更新(合并)priority_B。
怎么做?
Table_B 实体的 Java TableB
public class TableB implements Serializable {
...
@EmbeddedId
protected TableBPK tableBPK;
...
}
ID/PK TableBPK
@Embeddable
public class TableBPK implements Serializable {
...
@Basic(optional = false)
@Column(name = "PRODUCT_CODE_B")
private String productCodeB;
@Basic(optional = false)
@Column(name = "PRIORITY_B")
private Long priorityB;
...
}
我的失败代码:
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaUpdate<TableB> criteriaUpdate = criteriaBuilder.createCriteriaUpdate(TableB.class);
Root<TableB> root = criteriaUpdate.from(TableB.class);
criteriaUpdate
.set(OldTableB.tableBPK.priorityB, newId) // HOW TO DO THIS?
.where(criteriaBuilder.equal(root.get(OldTableB.tableBPK.priorityB), oldId)); // HOW TO DO THIS?
entityManager.createQuery(criteriaUpdate).executeUpdate();
【问题讨论】:
标签: jpa java-8 sql-update compound-key