Spring 4 JPA @Column绕过setter函数

时间:2016-02-01 18:18:11

标签: hibernate jpa spring-data

我有一个使用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()函数吗?

谢谢, 杰罗姆。

1 个答案:

答案 0 :(得分:0)

您可以通过将@Column(name="processCode")放在getter方法上而不是注释字段来实现。

默认情况下,您还必须在getter方法上使用其他映射注释,以使其工作(尤其是@Id注释)。