我得到这个异常被映射到数据库中的主键列。不允许更新
我正在阅读这个问题:合并实体,更改其 ID,再次合并,导致“映射到数据库中的主键列。不允许更新”错误
我想要实现的答案就像https://stackoverflow.com/a/39680764/811293基于这篇文章:https ://thoughts-on-java.org/criteria-updatedelete-easy-way-to/
我的问题是:
表_A
PRODUCT_CODE_A VARCHAR2(10) NOT NULL
...
CONSTRAINT Table_A_PK PRIMARY KEY (PRODUCT_CODE_A) ENABLE
表_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
. 怎么做?
实体的Java TableBTable_B
public class TableB implements Serializable {
...
@EmbeddedId
protected TableBPK tableBPK;
...
}
ID/PK表BPK
@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();