为什么我会收到包含JPA主键的JDBC INSERT语句?
引起: org.apache.openjpa.persistence.EntityExistsException:无法插入 表'ProductionDetail'中的标识列的显式值 IDENTITY_INSERT设置为OFF。 {prepstmnt 6933355 插入 ProductionDetail(BranchID,Date,DepartmentID,Price, ProductionDetailID ,Count,LastUpdated,Notes,LastUpdatedByUser)VALUES(?,?,?,?,?,?,?,?,?)} [code = 544,state = 23000]
tomcat-8.5.3-tomee7 / EclipseLink 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);
}
}
答案 0 :(得分:0)
原来我有一个表,其中我设置的所有列加上Identity列都是聚类约束的一部分。 JPA希望将所有列设置为约束的一部分。我非常肯定在我清理完之后我会回到正轨。再次感谢您的倾听。