java - 无效的 hibernate 警告? '@Access(AccessType.PROPERTY) on a field has no effect'

标签 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);
    }

UserType 是一个枚举。 这个问题是我不能简单地使用 @Enumerated 注释来映射 UserType,因为代码中枚举的表示与代码中的不同,例如:

public enum UserType {
CUSTOMER_NON_PRO("custnop") ...

在处理实体时,我希望能够将枚举设置为 userType 而不是它的 String 表示形式。为此,我创建了一个公共(public) setter,用于设置枚举 (userType) 并将其转换为它的 String 表示形式(使用 hibernate 进行映射)。类似地,有一个 protected setUserTypeS,它必须由 hibernate 调用并将 String userType 映射到枚举 UserType。

为此,hibernate 当然必须使用 setter 来填充实体。在我们的项目中,最好在属性本身上设置注释 i.o. setter/getter / setter/getter 。因此,hibernate 将使用内省(introspection)直接设置属性值(从而绕过 setter )。对于 userTypeS,我指出访问类型是 PROPERTY(即 FIELD),因此 hibernate 将调用 setUSerTypeS。

所有这些工作都很顺利。 “问题”是在我们的日志中,我们看到出现以下警告:

org.hibernate.cfg.AnnotationBinder - Placing @Access(AccessType.PROPERTY) on a field does not have any effect.

这个警告似乎不正确。如果我从字段 userTypeS 中删除 @Access(AccessType.PROPERTY),那么 hibernate 将不会调用 setter,因此不会设置枚举 userType。所以,放置 @Access(AccessType.PROPERTY) 确实有影响。

此警告消息是否无效或已过时,还是我误解了什么?

谢谢,

最佳答案

@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);
}

private String userTypeS; 根本不需要。

关于java - 无效的 hibernate 警告? '@Access(AccessType.PROPERTY) on a field has no effect',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5245564/

相关文章:

java - 我如何在 while 循环中重复语句 "enter marks or grade"。在这种情况下,每次控制回到循环开始以再次输入主题?

java - 出现错误考虑在配置中定义类型为 'com.sam.cmsshoppingcart.models.PageRepository' 的 bean

java - 您可以使用 JPA 和 Hibernate 在一个事务中进行批量删除吗?

hibernate - 我可以为 @Entity 定义默认顺序吗?

java - Hibernate Ehcache 不适用于 SQL Native 查询缓存

java - ArrayList.contains() 对比 HashMap.containsKey() 对比 HashMap.get()

java - 如何仅使用注释读取 Controller 中的属性文件? Spring MVC

java - 如何在 Map 中控制 JPA 列名

hibernate - JPA/Hibernate 删除实体有时不起作用

java - 我怎样才能让两个线程为我的应用程序工作