【发布时间】:2016-02-01 18:18:11
【问题描述】:
我有一个使用 Spring 4、JPA、Hibernate 和 MySQL 的工作程序,我正在将 JUnit 测试应用于该程序作为学习练习。
在实体类上我映射了一个字段:
@Column(name="processCode")
private String processCode = null;
public void setProcessCode(String code) { this.processCode = Utilities.setNotNull(code); }
(Utilities.java 包含一些辅助函数。setNotNull(String code) 类似于 "return (code == null) ? "" : code;")
当我通过内存创建一个对象时,一个空的“代码”会变成一个空白的 processCode:
myObject.setProcessCode(null);
"".equals(myObject.getProcessCode()); // eval true
当我通过JPA/Hibernate获取数据库记录,并且数据库中的字段为空值时,该字段为空。
myObject = manager.find(MyObject.class, 1L);
myObject.getProcessCode() == null; // eval true
即DB获取代码直接填充私有属性processCode,我的setter没有被触发。
我可以强制 manager.find() 使用 setProcessCode() 函数吗?
谢谢, 杰罗姆。
【问题讨论】:
标签: hibernate jpa spring-data