Hibernate不承认持久的getter / setter属性

时间:2011-05-18 11:20:55

标签: java hibernate orm jpa

我的实体类中有这个属性:

@Column(name="avatar",nullable=false,length=1000)
String getAvatarData() {
    return new JSONObject(avatar.export()).toString();
}
void setAvatarData(String data) {
    avatar = Avatar.restore(new JSONObject(data).toMap());
}

Hibernate根本不处理它。至少,它不包含在它生成的模式中。

2 个答案:

答案 0 :(得分:2)

@Access(AccessType.PROPERTY)

在您的实体上。这是JPA 2.0。对于1.0,请使用org.hibernate.AccessType

@AccessType("property")

顺便说一句,我宁愿有一个带有getter和setter的简单字段,而是注释该字段。然后,如果您想要自定义转换,请添加其他方法,例如getFooAsJSON

答案 1 :(得分:2)

澄清Bozho的答案:在JPA 2.0(Hibernate 3.5及更高版本)中,您声明一个具有属性访问权限的字段如下:

@Access(AccessType.FIELD)
public class Foo {
    ...
    @Access(AccessType.PROPERTY)
    @Column(name="avatar",nullable=false,length=1000) 
    String getAvatarData() { ... }

    void setAvatarData(String data) { ... }
}

在以前版本的Hibernate中 - 如下所示(注意注释仍然放在字段上):

@Access("field")
public class Foo {
    ...
    @Access("property")
    @Column(name="avatar",nullable=false,length=1000) 
    private Avatar avatarData;

    String getAvatarData() { ... }
    void setAvatarData(String data) { ... } 
    ...
}