2010-09-30 3 views
7

J'ai une classe:Comment utiliser le type personnalisé dans la colonne JPA?

public class Email { 
    private String name; 
    private String domain; 
    public String toString() { 
    return name + "@" + domain; 
    } 
} 

Je veux l'utiliser dans la colonne JPA:

@Entity 
public class User { 
    @Id private Integer id; 
    private Email email; 
} 

Voici ce que dit Hibernate:

org.hibernate.MappingException: Could not determine type for: com.XXX.Email 

Comment faire comprendre mon habitude type. Je pense que c'est quelque chose de très simple, mais ne peut pas trouver dans la documentation.

Répondre

11

Eh bien, il y a plusieurs façons:

  • annoter la classe Email avec @Embeddable, et ont:

    @Embedded 
    private Email email; 
    
  • déclare un type de valeur personnalisée - voir here (en utilisant @Type)

+0

@Bozho Je me demande si r la seconde approche proposée est-elle possible avec juste JPA (sans annotations spécifiques à Hibernate)? – yegor256

+0

@Vincenzo no. Voir cette réponse http://stackoverflow.com/questions/3628344/jpa2-0-support-of-custom-user-types-and-second-level-cache – Bozho

+0

@Bozho Impossible d'implémenter le même comportement avec les setters/getters? – yegor256

0

Vous pouvez faire du courrier électronique une entité et cela fonctionnera ... mais c'est assez inefficace.

@Entity 
public class Email { 
    ... 
} 

Ou vous pouvez swtich Email-String et cela fonctionnera. (Quel est le point de l'encapsulation d'une chaîne de toute façon?)

Vous pouvez lire this tutorial sur les types d'utilisateurs personnalisés dans Hibernate (depuis que vous l'avez balisé).

Ou vous pouvez utiliser @Embebbed comme le dit Bozho.

Questions connexes