2011-05-18 49 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) { ... } 
    ... 
}