2010-09-30 33 views
7

Tôi có một lớp:Cách sử dụng loại tùy chỉnh trong cột JPA?

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

Tôi muốn sử dụng nó trong cột JPA:

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

Đây là những gì Hibernate nói:

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

Làm thế nào để làm cho nó hiểu tùy chỉnh của tôi kiểu. Tôi nghĩ rằng đó là một cái gì đó rất đơn giản, nhưng không thể tìm thấy trong tài liệu.

Trả lời

11

Vâng, có một số cách sau:

  • chú thích lớp Email với @Embeddable, và có:

    @Embedded 
    private Email email; 
    
  • khai báo một kiểu giá trị tùy chỉnh - xem here (sử dụng @Type)

+0

@Bozho Tôi tự hỏi whethe r phương pháp tiếp cận thứ hai được đề xuất là có thể với chỉ JPA (không có chú thích cụ thể Hibernate)? – yegor256

+0

@Vincenzo no. Xem câu trả lời này http://stackoverflow.com/questions/3628344/jpa2-0-support-of-custom-user-types-and-second-level-cache – Bozho

+0

@Bozho Tôi không thể thực hiện cùng một hành vi thông qua người định cư/getters? – yegor256

0

Bạn có thể tạo email cho một thực thể và nó sẽ hoạt động ... nhưng nó khá là không chính xác.

@Entity 
public class Email { 
    ... 
} 

Hoặc bạn có thể swtich Email-String và nó sẽ làm việc. (Điểm của chuỗi là gì?)

Bạn có thể đọc this tutorial về các loại người dùng tùy chỉnh trong Hibernate (vì bạn đã gắn thẻ nó).

Hoặc bạn có thể sử dụng @Embebbed như Bozho nói.

Các vấn đề liên quan