2010-09-30 16 views
7

Mam klasy:Jak używać niestandardowego typu w kolumnie JPA?

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

Chcę używać go w kolumnie JPA:

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

To co Hibernate mówi:

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

Jak sprawić, by to zrozumieć mój zwyczaj rodzaj. Myślę, że jest to coś bardzo prostego, ale nie można go znaleźć w dokumentacji.

Odpowiedz

11

Cóż, istnieje wiele sposobów:

  • annotate klasa Email z @Embeddable i mają:

    @Embedded 
    private Email email; 
    
  • zadeklarować typ wartości zwyczaj - patrz here (używając @Type)

+0

@Bhoho Zastanawiam się, że r drugie proponowane podejście jest możliwe za pomocą tylko JPA (bez adnotacji Hibernate)? – yegor256

+0

@Vincenzo no. Zobacz tę odpowiedź http://stackoverflow.com/questions/3628344/jpa2-0-support-of-custom-user-types-and-second-level-cache – Bozho

+0

@Bozho Nie mogę zaimplementować tego samego zachowania za pomocą ustawiaczy/getters? – yegor256

0

Możesz wysłać e-mail do istoty, która zadziała ... ale jest dość nieefektywna.

@Entity 
public class Email { 
    ... 
} 

Albo można swtich z Email do String i będzie działać. (Jaki jest sens owijania ciągu znaków?)

Możesz przeczytać this tutorial o niestandardowych typach użytkowników w trybie hibernacji (od momentu oznaczenia go tagiem).

Lub możesz użyć @Embebbed, jak mówi Bozho.

Powiązane problemy