2012-07-04 8 views
9

W tej chwili przenoszę swój projekt z odwzorowań Hibernate HBM na adnotacje. Wszystko było łatwe, jeśli chodzi o małe klasy. Ale mam te same wielkie klasy i staram się połączyć zarówno mapowanie, jak i adnotacje dla tej klasy. Przeczytałem, że było to możliwe dzięki użyciu właściwości hibernacji "hibernate.mapping.precedence" i ustawieniu jej na "class, hbm" zamiast "hbm, class". (Patrz: In Hibernate: is it possible to mix Annotations and XML configuration for an Entity?)Hibernate: Migracja z mapowania do adnotacji - czy można mieszać hbm i adnotację?

Na przykład mam następujące klasy dokumentu:

@Entity 
@Table(name="DOCUMENT") 
public class Document { 
    @Column(name="DESCRIPTION") 
    private String description; 
} 

i następujący plik Document.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
<hibernate-mapping> 
    <class name="Document" table="DOCUMENT" > 
    <id name="id" column="DOCUMENT_ID" type="long" /> 
    </class> 
</hibernate-mapping> 

W moim pliku hibernate.cfg.xml Włożyłem:

<property name="hibernate.mapping.precedence">class, hbm</property> 
<mapping class="Document"/> 
<mapping resource="Document.hbm.xml"/> 

Moim problemem jest to, że: - jeśli kładę „klasę, HBM "dla pierwszeństwa mam TYLKO moje adnotacje w klasie Dokument - jeśli wstawię" hbm, klasa "to mam TYLKO moje mapowania w hsb ressource

Czy ktoś knwo, jeśli istnieje sposób, aby mieć dwie adnotacje i Mapowania HBM?

Dzięki

Kamran

PS: używam: 4.1.4 Hibernate i Spring Framework 3.1.1

Odpowiedz

11

Nie można mieszać je do tej samej klasy. Pod koniec section 1.2 of hibernate annotations:

Możesz mieszać adnotowane klasy trwałe i klasyczne deklaracje hbm.cfg.xml z tym samym SessionFactory. Nie można jednak zadeklarować klasy kilka razy (bez względu na to, czy jest to adnotacja, czy też poprzez hbm.xml). Nie można łączyć strategii konfiguracyjnych (hbm z adnotacjami) w hierarchii jednostek.

Aby ułatwić proces migracji z plików hbm do adnotacji, mechanizm konfiguracji wykrywa kopiowanie odwzorowań między adnotacjami a plikami hbm. Pliki HBM są następnie traktowane priorytetowo w stosunku do adnotowanych metadanych według klasy klasy. Możesz zmienić priorytet za pomocą właściwości hibernate.mapping.precedence. Wartość domyślna to hbm, klasa, zmieniając ją na klasę, hbm ustala priorytet dla klas z adnotacjami nad plikami hbm w przypadku wystąpienia konfliktu.

Używanie adnotacji i plików hbm deklaruje klasę dwa razy. W związku z tym jeden będzie nadrzędny względem drugiego w zależności od klasy (klasa z klasy oznacza, że ​​dla każdej klasy używany jest tylko plik hbm lub adnotacje).

+0

Drogi Pablo, bardzo dziękuję za wyjaśnienia. ! – marcam

+0

Stary bardzo pomocny –

Powiązane problemy