java - 为什么没有创建或更新 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 字段。有人能看出为什么吗?
解决方案
我认为 UPDATE 和 CREATE 是有区别的。
尝试用 em.persist(data) 替换 em.merge(data)
第一次使用 persist 创建新行时,它会保存内容吗?数据库中字符串定义的长度是多少?每当从您的代码运行 HQL 时检查数据库日志,日志是否在持续期间的某个时间点抱怨?
在运行合并之前,可能需要先测试该行是否存在。
推荐阅读
- python - 如何使用 PYPDF2 从 pdf 中提取表值?
- typescript - 类型“未定义”不能分配给构造函数定义中的类型“数字”
- javascript - DeviceOrientationEvent 不适用于所有服务器
- javascript - Node.js 多个应用程序
- python - 如何在 Apache Beam (Python) 中按键在静态查找表上以流模式加入 PCollection
- c# - UDP 打孔 - 可靠的算法
- html - 尝试使用scrapy spider在microsoft.com中查找登录链接
- javascript - react-native-snap-carousel 无法正确渲染
- tensorflow - Tensorflow-gpu + Keras 安装报错:无法加载原生 TensorFlow 运行时
- java - 从属性文件中读取俄语文本用问号替换俄语字符