2011-05-18 32 views
1

我有这个属性格式在我的实体类:Hibernate不承认持续的getter/setter属性

@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
@Access(AccessType.PROPERTY) 

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

@AccessType("property") 

顺便说一句,我宁愿有getter和setter方法简单的现场,和注释字段,而不是。然后,如果你想自定义转换,添加其他方法,如getFooAsJSON

+0

我添加了注释getAvatarData,没有效果。它在文档中也没有提到(关于使用propery访问而不是字段访问,这是相当模糊的)。 http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/mapping.html#mapping-declaration-property – 2011-05-18 11:26:35

+0

哦,我发现它需要在课堂上。这真的有必要吗?我在课堂上有很多其他栏目,对于这些栏目,栏位访问没有问题。 – 2011-05-18 11:27:37

2

澄清Bozho的回答是:在JPA 2.0(休眠3.5及以上)声明与属性访问单场如下:

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

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

在休眠之前的版本 - 如下(注意注释仍然是摆在球场上):

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

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