Hibernate Spring4JPA@Column绕过setter函数

Hibernate Spring4JPA@Column绕过setter函数,hibernate,jpa,spring-data,Hibernate,Jpa,Spring Data,我有一个使用Spring4、JPA、Hibernate和MySQL的工作程序,我正在将JUnit测试作为一个学习练习应用到该程序中 在实体类上,我映射了一个字段: @Column(name="processCode") private String processCode = null; public void setProcessCode(String code) { this.processCode = Utilities.setNotNull(code); } (Utilities.j

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

谢谢,
Jerome。

您可以通过将
@Column(name=“processCode”)
放置在getter方法上而不是注释字段来完成


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

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


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

这是可行的,但要小心。我有带下划线的栏,比如“电话号码”。它在HQL中使用,如“来自用户u,其中u.phone_号码,如“…”。将列放置在属性上时,此操作正常。当该列位于getter上时,我的HQL必须变为“from User u where u.phoneNumber like'…”。否则,我会得到“QueryException:无法解析属性:phone_number…此功能正常,但请小心。我有带下划线的列,如“phone_number”。它在HQL中使用,如“from User u where u.phone_number like'…”。当该列放置在属性上时,此功能正常。当该列位于getter上时,我的HQL必须变为“来自用户u,其中u.phoneNumber类似于“…”。否则我会得到“QueryException:无法解析属性:phone_number…”。。。