带有@Embeddable Primary Key的JPA为PK生成JDBC INSERT

时间:2016-07-12 20:04:05

标签: jpa

为什么我会收到包含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);    
    }
}

1 个答案:

答案 0 :(得分:0)

原来我有一个表,其中我设置的所有列加上Identity列都是聚类约束的一部分。 JPA希望将所有列设置为约束的一部分。我非常肯定在我清理完之后我会回到正轨。再次感谢您的倾听。

相关问题