2016-07-12 9 views
0

JPAからの主キーを含むJDBC INSERTステートメントを取得するのはなぜですか? IDENTITY_INSERTがOFFに設定されている場合、テーブルにID列に 明示的な値を挿入することはできません「ProductionDetail」: org.apache.openjpa.persistence.EntityExistsException:によって引き起こさ@Embeddable主キーを持つJPAはPKのJDBC INSERTを生成します

。 {prepstmnt 6933355 ProductionDetail INTO INSERT(BranchID、日付、のDepartmentID、価格、 ProductionDetailID、カウント、LastUpdated、ノート、LastUpdatedByUser)VALUES(?、?、?、?、?、?、?、?、? )} [コード= 544、状態= 23000]

のTomcat-8.5.3-tomee7/EclipseLinkのJPA 2.1 /エンティティクラスから既存のデータベース/ NetBeansの8.1生成されたセッション豆からのNetBeans 8.1生成されたエンティティ・クラスを

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

私はすべての列があるテーブルを持っています設定+ ID列はクラスタ化された制約の一部です。 JPAはすべての列を制約の一部として設定する必要があります。私はこれをきれいにした後、私はトラックに戻ってきます。聞いてくれてありがとう。

関連する問題