2012-05-05 47 views
0

我想一個類映射到一個基本類型在JPA映射類原始人

@Entity 
@Table(name="PERSON") 
public class Person implements Serializable { 
    ... 
    private Email email = null; 
    ... 
    @Column(name="email") 
    public Email getEmail() { 
     return email; 
    } 
    public void setEmail(Email email) { 
     this.email=email; 
    } 
} 

在這個例子中,我要保存的電子郵件像一個字符串

我想是這樣的:

interface someInterface{ 

    String getValue(); 
    void setValue(String p); 

} 

然後,如果我在電子郵件中實現此接口,它可以保存並加載透明(我還沒有找到像這樣的東西)。

我不想序列化類

我使用電子郵件作爲一個例子,但我心裏有許多其他的課,幾乎是一個完整的實體。

有什麼想法?

+0

這裏有一些容易混淆的方面,像 「基本類型」。但是你在尋找像「@ Embeddable」這樣的東西嗎? – esej

回答

0

JPA2.1提供AttributeConverter這意味着場可以打上一個轉換器將它保持爲,例如,一個字符串。所有JPA實現目前都有自己的變體,但DataNucleus JPA已經提供了JPA2.1功能,請參閱this page的腳。

-1

就JPA而言,沒有什麼能夠阻止您在類中使用String。或任何其他原始類型爲此事......

編輯:你的意思是這樣希望

@Entity 
@Table(name="PERSON") 
public class Person implements Serializable { 
    ... 
    private String email = null; 
    ... 
    @Column(name="email") 
    public String getEmail() { 
     return email; 
    } 
    public void setEmail(String email) { 
     this.email=email; 
    } 
} 
+0

我想將電子郵件映射到字符串。像字符串一樣保存他 – Troncador

+0

我不清楚你的問題,那麼爲什麼不把你的班級的字符串電子郵件?而不是電子郵件? – Thihara

+0

我更喜歡電子郵件。我可以特別想問一個電子郵件。 getUser()sendMail()等。我想從數據庫中提取電子郵件,並將其用作電子郵件:P。但保存它像一個原始字符串。 – Troncador

0

做出兩個變量。作爲對象的電子郵件,您標記爲存儲在數據庫中的@Transient和emailStr。 emailStr getter和setter應該是私有的,並且getEmail基於emailStr創建郵件對象(lazily)。

另一種解決方案是,如果您在許多實體中擁有電子郵件,則會創建一個自定義UserType。

只是谷歌休眠用戶類型..

0
+0

我認爲正是我想要的,但我找不到代碼示例。在[示例]中(http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Mapping/Basic_Mappings/Default_Conversions_and_Converters/Converter)你知道我在哪裏可以找到_GenderConverter_? – Troncador

+0

Converter接口非常簡單,http://www.eclipse.org/eclipselink/api/2.3/org/eclipse/persistence/mappings/converters/Converter.html,我沒有在我們的例子中找到一個gneder轉換器,但在我們的測試中找到了CustomSexConverter,http://dev.eclipse.org/svnroot/rt/org.eclipse.persistence/trunk/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/ JPA /高級/ CustomSexConverter.java – James