为什么我从JPA获得包含主键的JDBC INSERT语句?
由以下原因引起:org. apache.openjpa.持久性.EntityExistsException:当IDENTITY_INSERT设置为OFF时,无法为表'ProductionDetail'中的标识列插入显式值。{prestmnt 6933355 INSERT INTO ProductionDetail(BrandchID,Date,DepartmentID,Price,ProductionDetailID,Count,LastUpdate,Notes,LastUpdatedByUser)VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)} [code=544,state=23000]
Tomcat-8.5.3-tomee7/Eclipse Link JPA 2.1/NetBeans 8.1从现有数据库生成实体类/NetBeans 8.1从实体类生成会话bean
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);
}
}
事实证明,我有一个表,其中我设置的所有列加上身份列都是集群约束的一部分。JPA希望将所有列设置为约束的一部分。我很确定在我清理完这个之后,我会回到正轨。再次感谢您的收听。