我有一个使用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(字符串代码)类似于“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()函数吗?
谢谢, 杰罗姆。
答案 0 :(得分:0)
您可以通过将@Column(name="processCode")
放在getter方法上而不是注释字段来实现。
默认情况下,您还必须在getter方法上使用其他映射注释,以使其工作(尤其是@Id
注释)。