【发布时间】:2016-07-12 20:04:05
【问题描述】:
为什么我会从 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);
}
}
【问题讨论】:
标签: jpa