JPAからの主キーを含むJDBC INSERTステートメントを取得するのはなぜですか? IDENTITY_INSERTがOFFに設定されている場合、テーブルにID列に 明示的な値を挿入することはできません「ProductionDetail」: org.apache.openjpa.persistence.EntityExistsException:によって引き起こさ@Embeddable主キーを持つJPAはPKのJDBC INSERTを生成します
。 {prepstmnt 6933355 ProductionDetail INTO INSERT(BranchID、日付、のDepartmentID、価格、 ProductionDetailID、カウント、LastUpdated、ノート、LastUpdatedByUser)VALUES(?、?、?、?、?、?、?、?、? )} [コード= 544、状態= 23000]
のTomcat-8.5.3-tomee7/EclipseLinkのJPA 2.1 /エンティティクラスから既存のデータベース/ NetBeansの8.1生成されたセッション豆からのNetBeans 8.1生成されたエンティティ・クラスを
public class ProductionDetail implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected ProductionDetailPK productionDetailPK;
@Embeddable
public class ProductionDetailPK implements Serializable {
@Basic(optional = false)
@NotNull
@Column(name = "ProductionDetailID")
private int productionDetailID;
public class UnmanagedClass implements Command {
List<ProductionDetail> productionDetailsToInsert = new ArrayList<>();
ProductionDetail productionDetailEntity; //at this point ProductionDetailPK is null
//at this point ProductionDetailPK.ProductionDetailID defaults to 0, logically meaningless
ProductionDetailPK productionDetailPK = new ProductionDetailPK();
productionDetailPK.setBranchID(Integer.parseInt(request.getParameter("branchId")));
productionDetailPK.setDepartmentID(Integer.parseInt(request.getParameter("department")));
productionDetailPK.setDate(productionDate);
productionDetailPK.setPrice(new BigDecimal(priceOrId));
productionDetailEntity.setBranches(branches);
productionDetailEntity.setDepartment(department);
productionDetailEntity.setCount(Integer.parseInt(count));
productionDetailEntity.setProductionDetailPK(productionDetailPK);
productionDetailsToInsert.add(productionDetailEntity);
insertProductionDetails(productionDetailsToInsert)
}
public void insertProductionDetails(List<ProductionDetail> ProductionDetailsList) {
for (ProductionDetail productionDetail : ProductionDetailsList) {
//getEntityManager().persist(entity);
this.productionDetailFacade.create(productionDetail);
}
}