2012-05-05 2 views
0

Je veux Mapper une classe à un type primitifEn classe de cartographie JPA Primitive

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

Dans cet exemple, je veux sauver l'e-mail comme une chaîne

Je souhaite quelque chose comme:

interface someInterface{ 

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

} 

Ensuite, si j'implémente cette interface dans Email, il peut être sauvegardé et chargé de manière transparente (je n'ai pas trouvé quelque chose comme ça).

Je ne veux pas sérialiser la classe

J'utilise Email comme exemple, mais je pense à beaucoup d'autres classes, à peu d'être une entité entière.

Une idée?

+0

Il y a certains aspects de confusion ici, comme le "type primitif". Mais cherchez-vous quelque chose comme '@ Embeddable'? – esej

Répondre

0

JPA2.1 fournit AttributeConverter ce qui signifie qu'un champ peut être marqué avec un convertisseur, il persiste comme, par exemple, une chaîne. Toutes les implémentations JPA ont actuellement leur propre variante, mais DataNucleus JPA fournit déjà la fonctionnalité JPA2.1, voir le pied de this page.

-1

Rien ne vous empêche d'utiliser String dans vos classes en ce qui concerne JPA. Ou tout autre type primitif pour cette matière ...

EDIT: Vous voulez dire quelque chose comme ça, espérons

@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

Je souhaite mapper le courrier électronique à une chaîne. Sauvez-le comme une chaîne – Troncador

+0

Je ne suis pas sûr de votre problème, alors pourquoi ne pas simplement mettre String email dans votre classe? au lieu d'Email email? – Thihara

+0

Je préfère l'email. Je peux demander spécifique à un email. getUser() sendMail(), etc. Je veux extraire un email de la base de données et l'utiliser comme un email: P. Mais enregistrez-le comme une chaîne primitive. – Troncador

0

Faites deux variables. Email qui est objet et que vous marquez comme @Transient et emailStr que vous stockez dans la base de données. Le getter et le setter d'emailStr devraient être privés, et le getEmail crée l'objet d'email (paresseusement) basé sur l'emailStr.

Une autre solution, si vous avez un email dans de nombreuses entités, est de créer un UserType personnalisé.

juste mise en veille prolongée google UserType ..

0
+0

Je pense est exactement ce que je veux, mais je ne peux pas trouver des exemples de code.Dans ce [exemple] (http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Mapping/Basic_Mappings/Default_Conversions_and_Converters/Converter) Savez-vous où je peux trouver _GenderConverter_? – Troncador

+0

L'interface Converter est assez simple, http://www.eclipse.org/eclipselink/api/2.3/org/eclipse/persistence/mappings/converters/Converter.html, je n'ai pas trouvé de convertisseur gneder dans nos exemples, mais Nous avons trouvé un CustomSexConverter dans nos tests, http://dev.eclipse.org/svnroot/rt/org.eclipse.persistence/trunk/jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/models/ jpa/advanced/CustomSexConverter.java – James

Questions connexes