2013-04-12 25 views
10

Tôi có một bảng GameCycle trong một db chứa một cột date loại number. Các giá trị trong cột này là các số có 8 chữ số đại diện cho một ngày ngược lại như '20130301'. Ánh xạ lên bảng này tôi có một lớp GameCycle chứa một trường được bảo vệ iDate loại java.util.Date. Trường đó được chú thích '@Type(type = "inverseDate")', sử dụng ánh xạ loại tùy chỉnh. Lớp Gamecycle được chú thích với '@TypeDef(name = "inverseDate", typeClass = InverseDateType.class)'jpa tùy chỉnh loại ánh xạ độc lập/javax.persistence.x thay thế cho org.hibernate.annotations.Type và org.hibernate.annotations.TypeDef

import org.hibernate.annotations.Type; 
import org.hibernate.annotations.TypeDef; 

@Entity 
@TypeDef(name = "inverseDate", typeClass = InverseDateType.class) 
@Table(name = "GAMECYCLE") 
public class GameCycle implements Comparable<GameCycle>, Serializable 
{ 
    @Type(type = "inverseDate") 
    @Column(name = "GC_DATE", nullable = false) 
    protected Date iDate = null; 
    ... 

Rõ ràng, nhập khẩu bind tôi để sử dụng chế độ ngủ đông như một thực hiện JPA vì vậy câu hỏi của tôi là:

Có cách nào để thoát khỏi các chú thích hibernate và làm cùng một ánh xạ kiểu tùy chỉnh bằng giải pháp tinh khiết javax.persistence?

Trả lời

7

No. Phiên bản hiện tại của đặc tả JPA không hỗ trợ ánh xạ kiểu tùy chỉnh. Đây là một trong những tính năng được mong đợi nhất cho JPA 2.1 trong tương lai.

Nếu bạn thực sự muốn loại bỏ các cảnh báo Hibernate cụ thể, điều duy nhất bạn có thể làm là ánh xạ trường của bạn dưới dạng String và thực hiện chuyển đổi cần thiết theo cách thủ công (trong getters/setters). Tuy nhiên, trong thực tế hầu hết các ứng dụng dựa trên JPA lớn đều sử dụng một số tính năng cụ thể của nhà cung cấp kiên trì, do đó tôi không nghĩ rằng việc tránh sự phụ thuộc vào Hibernate trong trường hợp này thực sự quan trọng.

+0

Quá xấu, tôi đã nghi ngờ rằng giải pháp duy nhất bên cạnh bị ràng buộc vào một thực hiện sẽ có một số chuyển đổi trong getters/setters. Cảm ơn bạn cho câu trả lời nhanh chóng mặc dù. – tyler

20

Loại Tuỳ chỉnh Mapping cuối cùng đã được thêm vào trong JPA 2.1 (, một phần của Java EE 7).
Chú thích @Type của Hibernate không còn cần thiết và có thể được thay thế bằng Loại chuyển đổi trong JPA 2.1.

JPA 2.1 đã bổ sung:

Ví dụ cơ bản nhất: (Ví dụ 1: Chuyển đổi một cơ bản attri Bute) - from source

@Converter 
public class BooleanToIntegerConverter 
    implements AttributeConverter<Boolean, Integer> 
{ ... } 

...

@Entity 
@Table(name = "EMPLOYEE") 
public class Employee 
{ 

    @Id 
    private Long id; 

    @Column 
    @Convert(converter = BooleanToIntegerConverter.class) 
    private boolean fullTime; 

} 

liên kết khác:

+0

Đây phải là câu trả lời được chấp nhận ngay bây giờ khi JPA 2.1 đã đến. –

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