非常に単純な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);
}
}
、レコードがエラーなしで挿入されています。
なぜですか?
こんにちは@ЮлийЩербак、私は手動で値を割り当てました:Ben bn = new Ben(); \t \t bn.id = "01"; \t \t bn.ownerId = "01"; \t \t bn.country = "SP"; \t \t benService.saveBen(bn); –
| @ A Torre申し訳ありませんが、私はすぐに2つのIDがあることに気付かなかった。あなたはそのようなことをする必要があります –