2013-04-12 12 views
10

Mam tabeli GameCycle w db, która posiada kolumnę date typu number. Wartości w tej kolumnie to 8-cyfrowe liczby reprezentujące odwrotną datę, np. "20130301". Zmapowane na tę tabelę, mam klasę GameCycle, która posiada chronione pole iDate typu java.util.Date. To pole jest opatrzone przypisami "@Type(type = "inverseDate")" za pomocą niestandardowego odwzorowania typu. Klasa Gamecycle jest opatrzone „@TypeDef(name = "inverseDate", typeClass = InverseDateType.class)JPA niezależny niestandardowy typ mapowania/javax.persistence.x alternatywą org.hibernate.annotations.Type i 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; 
    ... 

Oczywiście, import wiążą mnie do korzystania hibernacji jako JPA realizacji Więc moje pytanie brzmi:

Czy istnieje sposób, aby pozbyć się adnotacje Hibernate i zrobić to samo odwzorowanie typu niestandardowego przy użyciu czystego rozwiązania javax.persistence?

Odpowiedz

7

Nie. Aktualna wersja specyfikacji JPA nie obsługuje niestandardowych mapowań typów. Jest to jedna z najbardziej pożądanych funkcji dla przyszłej wersji JPA 2.1.

Jeśli naprawdę chcesz pozbyć się specyficznych hibernacji nagrań, jedyną rzeczą, którą możesz zrobić, to zamapować swoje pole jako String i ręcznie wykonać odpowiednią konwersję (w plikach pobierających/ustawiających).

Jednak w praktyce prawie każda duża aplikacja oparta na JPA używa pewnych cech zależnych od implementacji dostawcy utrwalacza, dlatego nie sądzę, że unikanie zależności od Hibernacji w tym przypadku jest naprawdę ważne.

+0

Szkoda, miałem podejrzenie, że jedynym rozwiązaniem oprócz wiążąc się z implementacji byłby jakiś konwersji w pobierających/ustawiających. Dziękuję za szybką odpowiedź. – tyler

20

Typ niestandardowy Mapowanie został ostatecznie dodane w JPA 2.1 (część Java EE 7).
Adnotacja Hibernate'a o @Type nie jest już potrzebna i może być zastąpiona przez Konwersję typu w JPA 2.1.

JPA 2,1 dodano:

Najprostszym przykładem (Przykład 1: Konwersja podstawowy 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; 

} 

Inne linki:

+0

To powinno być zaakceptowaną odpowiedzią teraz, gdy nadszedł JPA 2.1. –

Powiązane problemy