首页 > 解决方案 > 为什么没有创建或更新 Hibernate 受控对象/实体的这一字段?

问题描述

我有一个根据 HTML 页面中的条目更新的对象“化学”。数据正确返回给 Java 代码,但这一字段并未更新或在数据库中创建。化学实体定义如下:

@Entity
@NamedQuery(name="Chemical.findAll", query="SELECT c FROM Chemical c")
public class Chemical implements Serializable {
  @Id
  @Column(name="chemical_id")
  @GeneratedValue(strategy=GenerationType.IDENTITY)
  private int chemicalId;

...
  private string formula; <---  THE FIELD THAT WILL NOT UPDATE/BE CREATED

....

 public void setFormula(String formula) {
   this.formula = formula;
}

public String getFormula() {
   return this.formula;
}

.....

实际保存/更新数据库的 Java 代码:

public void saveOrUpdate(final T data) throws CPDPersistenceException {
    final EntityManager em = getEntityManager();
    try {
    final EntityTransaction transaction = em.getTransaction();
    transaction.begin();
    em.merge(data);
    transaction.commit();
} catch (final PersistenceException e) {
    throw new PersistenceException(e);
}
}

执行代码后,如果已进行更改,则数据库中的其他字段已更改。但是,“公式”没有改变,仍然是一个 NULL 字段。有人能看出为什么吗?

标签: javahibernatejpa

解决方案


我认为 UPDATE 和 CREATE 是有区别的。

尝试用 em.persist(data) 替换 em.merge(data)

第一次使用 persist 创建新行时,它会保存内容吗?数据库中字符串定义的长度是多少?每当从您的代码运行 HQL 时检查数据库日志,日志是否在持续期间的某个时间点抱怨?

在运行合并之前,可能需要先测试该行是否存在。


推荐阅读