提问者:小点点

JPA与@嵌入式主键生成JDBC INSERTPK


为什么我从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);    
    }
}

共1个答案

匿名用户

事实证明,我有一个表,其中我设置的所有列加上身份列都是集群约束的一部分。JPA希望将所有列设置为约束的一部分。我很确定在我清理完这个之后,我会回到正轨。再次感谢您的收听。