2010-09-30 10 views
7

tengo una clase:¿Cómo usar el tipo personalizado en la columna JPA?

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

quiero utilizarlo en la columna de la APP:

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

Esto es lo que Hibernate dice:

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

Cómo hacer que comprenda mi costumbre tipo. Creo que es algo muy simple, pero no se puede encontrar en la documentación.

Respuesta

11

Bueno, hay un número de maneras:

  • Anotar la clase Email con @Embeddable, y tienen:

    @Embedded 
    private Email email; 
    
  • declarar un tipo de valor personalizado - ver here (usando @Type)

+0

@Bozho Me pregunto si r el segundo enfoque propuesto es posible con solo JPA (sin anotaciones específicas de Hibernate)? – yegor256

+0

@Vincenzo no. Ver esta respuesta http://stackoverflow.com/questions/3628344/jpa2-0-support-of-custom-user-types-and-second-level-cache – Bozho

+0

@Bozho ¿No puedo implementar el mismo comportamiento a través de setters/getters? – yegor256

0

Puede hacer que el correo electrónico sea una entidad y funcionará ... pero es bastante ineficaz.

@Entity 
public class Email { 
    ... 
} 

O puede swtich Email-String y funcionará. (¿Cuál es el punto de envolver una Cadena de todos modos?)

Puede leer this tutorial sobre los tipos de usuario personalizados en Hibernate (ya que lo etiquetó).

O puede usar @Embebbed como dice Bozho.

Cuestiones relacionadas