2017-03-16 9 views
0

非常に単純なEntityManager merge()メソッドに問題があります。 エントリーレコードが(PKに基づいて)DBに存在しない場合、それは挿入されなければなりません。しかし私の場合、merge()はレコードをうまく更新しますが、エンティティオブジェクトの値を挿入するのではなく、挿入する必要があるときには、すべてのフィールドにnullを挿入しようとしています。だから私は次のエラーを取得する:Java Hibernate EntityManager merge()は常にすべてのフィールドにnullを挿入したい

SQLIntegrityConstraintViolationException: ORA-01400: cannot insert NULL into ("REFDATA"."CLIENT"."ID")

これは私のリポジトリとエンティティコードです:私は存続によって合併交換する場合

@Repository 
 
public class BenDAOImpl implements BenDAO { 
 

 
    @Autowired 
 
    EntityManager em; 
 

 
    @Override 
 
    @Transactional 
 
    public void saveBen(Ben ben) { 
 
     em.merge(ben); 
 
    } 
 
} 
 

 
////////////////////////////////////////////// 
 
@Entity 
 
@Table(name = "CLIENT") 
 
public class Ben implements Serializable{ 
 

 
    @Id 
 
    public String id; 
 
    @Id 
 
    public String ownerId; 
 
    public String country; 
 

 
    @Override 
 
    public boolean equals(Object obj) { 
 
     if (this == obj) return true; 
 
     if (obj == null) return false; 
 
     if (getClass() != obj.getClass()) return false; 
 
     Ben other = (Ben) obj; 
 
     return id.equals(other.id) && ownerId.equals(other.ownerId); 
 
    } 
 
}

、レコードがエラーなしで挿入されています。

なぜですか?

答えて

0

ORA-01400あなたのIDはnullと言っています。 idGeneratorをidフィールドに設定してください。 申し訳ありませんが、私はあなたに2つのIDがあることを直ちに気付かなかった。あなたはそのようなことをする必要があります。それが複合キーになるようにする

@Entity @IdClass(ProjectId.class) 
public class Project { 
    @Id String id; 
    @Id String ownerId; 
    : 
} 

Class ProjectId { 
    String id; 
    String ownerId; 
} 
+0

こんにちは@ЮлийЩербак、私は手動で値を割り当てました:Ben bn = new Ben(); \t \t bn.id = "01"; \t \t bn.ownerId = "01"; \t \t bn.country = "SP"; \t \t benService.saveBen(bn); –

+0

| @ A Torre申し訳ありませんが、私はすぐに2つのIDがあることに気付かなかった。あなたはそのようなことをする必要があります –

関連する問題