Sti*_*ens 7 java hibernate jpa
我有以下实体类用户:
public class User implements Serializable {
@Column(length = 10, name = "user_type")
@Access(AccessType.PROPERTY)
private String userTypeS;
@Transient
private UserType userType;
...
public void setUserType(UserType userType) {
this.userType = userType;
this.userTypeS = this.userType.getType();
}
protected void setUserTypeS(String userTypeS) {
this.userTypeS = userTypeS;
userType = UserType.toUserType(userTypeS);
}
Run Code Online (Sandbox Code Playgroud)
UserType是一个枚举.这个问题是我不能简单地使用@Enumerated注释来映射UserType,因为代码中枚举的表示不同于,例如:
public enum UserType {
CUSTOMER_NON_PRO("custnop") ...
Run Code Online (Sandbox Code Playgroud)
与实体协作时,我希望能够将枚举设置为userType而不是它的String表示.为此我创建了一个公共setter,它设置enum(userType)并将其转换为它的String表示(用hibernate映射).类似地,有一个受保护的setUserTypeS必须由hibernate调用,并将String userType映射到枚举UserType.
当然,hibernate必须使用setter来填充实体.在我们的项目中,最好在getters/setter上设置属性本身的注释.因此,hibernate将使用内省直接设置属性值(从而绕过setter).对于userTypeS,我指出访问类型是PROPERTY(io FIELD),因为hibernate将调用setUSerTypeS.
所有这一切顺利进行."问题"是我们的日志中会看到以下警告:
org.hibernate.cfg.AnnotationBinder - 在字段上放置@Access(AccessType.PROPERTY)没有任何效果.
此警告似乎不正确.如果我将从@Access(AccessType.PROPERTY)字段userTypeS中删除,那么hibernate将不会调用setter,因此不会设置enum userType.因此,放置@Access(AccessType.PROPERTY)确实有影响.
此警告信息是无效还是过时,或者我是否误解了某些内容?
谢谢,
Stijn
小智 7
@Access(AccessType.PROPERTY)应放在getter上,如:
@Access(AccessType.PROPERTY)
@Column(length = 10, name = "user_type")
public String getUserType() {
return this.userType.getType();
}
public void setUserType(UserType userType) {
this.userType = userType;
}
protected void setUserType(String userType) {
userType = UserType.toUserType(userTypeS);
}
Run Code Online (Sandbox Code Playgroud)
private String userTypeS; 根本不需要.