Java Hibernate EntityManager merge() 总是希望为所有字段插入 null



我在使用非常简单的EntityManager merge()方法时遇到了问题。 如果数据库中不存在条目记录(基于 PK),则应插入该记录,否则应进行更新。但就我而言,merge() 更新记录很好,但是当需要插入时,而不是插入实体对象的值,而是尝试在所有字段中插入 null。所以我收到以下错误:

SQLIntegrityConstraintViolationException: ORA-01400: 无法将 NULL 插入 ("REFDATA")。客户"。同上》)

这是我的存储库和实体代码:

@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);
}
}

如果我用持久替换合并,则插入记录时没有错误。

为什么?

ORA-01400 说你的ID是空的。尝试将 idGenerator 设置为 id 字段。 抱歉,我没有立即注意到您有两个 ID。你必须做这样的事情。因为它是组合键

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

最新更新