2009-09-05 12 views

Odpowiedz

126
  • @Basic oznacza, że ​​atrybut być utrwalone i standardowe odwzorowywanie ma być stosowany. Ma parametry, które pozwalają ci określić, czy atrybut ma być ładowany leniwie i czy jest on zerowy.

  • @Column pozwala określić nazwę kolumny w bazie danych, której atrybut ma być utrwalony.

Jeśli podasz jeden bez drugiego, otrzymasz domyślne zachowanie, które jest rozsądne, więc zwykle ludzie używają tylko jednego z wyjątkiem specjalnych przypadków.

Więc jeśli chcieliśmy leniwe ładowanie atrybut i określić nazwę kolumny możemy powiedzieć

@Basic(fetch=FetchType.LAZY) 
@Column(name="WIBBLE") 

Gdybyśmy neeed domyślny, non-lazy zachowanie potem po prostu @Column byłaby wystarczająca.

+1

To jest jasna odpowiedź. Dziękuję Ci. Zakładam więc, że można użyć '@ Basic' bez' @ Column', dlatego właściwości "opcjonalne" i "zerowe" istnieją w obu. Czy mam rację? –

+0

Nie twierdzę, że w pełni rozumiem specyfikację JPA dotyczącą różnic między wartością zerową @ Basic a wartością @ Column i skutkiem nieokreślenia żadnej, ani żadnej z nich. @Basic nullable jest opisany jako "podpowiedź", która ma związek z generowaniem schematu. @ Kolumnowy zerowy jest opisany jako definiujący charakterystykę kolumny w bazie danych. Moja praktyka polegałaby na użyciu skrzynki @Column. – djna

+15

@Basic (opcjonalnie) jest (powinien) być sprawdzany w czasie wykonywania przez dostawcę utrwalania przed zapisaniem do [email protected] Kolumna jest definicją kolumny w bazie danych i służy do generowania schematu: http://stackoverflow.com/questions/2899073/basicoptional-false-vs-columnnullable-false-in-jpa –

42

Oprócz odpowiedzi @ djna, warto zauważyć, że @Basic należy porównać z @OneToMany, @ManyToOne i @ManyToMany. Tylko jedna z nich może być określona na dowolnej właściwości. @Column i @JoinColumn można określić wraz z dowolnym z nich, aby opisać właściwości kolumny bazy danych. Są to dwa zestawy adnotacji, które mogą być używane razem, ale tylko jedna adnotacja każdego zestawu może być użyta jednocześnie.

19

Warto zauważyć, że podstawowy przeznaczony jest dla prymitywnych pól

http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes

podstawowym atrybutem jest jednym gdzie klasa atrybutu jest prosty typ takich jak String, numer, data i prymitywne. Wartość podstawowego atrybutu może być odwzorowana bezpośrednio na wartość kolumny w bazie danych.

Obsługiwane typy i konwersje zależą od platformy implementacji JPA i bazy danych. Każdy podstawowy atrybut używający typu, który nie jest bezpośrednio odwzorowywany na typ bazy danych, może zostać przekształcony do postaci binarnej bazy danych.

Najprostszym sposobem odwzorowania podstawowego atrybutu w WZP jest niepodejmowanie żadnych działań. Wszelkie atrybuty, które nie mają innych adnotacji i nie odwołują się do innych podmiotów, będą automatycznie mapowane jako podstawowe, a nawet serializowane, jeśli nie są typami podstawowymi. Nazwa kolumny dla atrybutu będzie domyślnie nazwana tak samo jak nazwa atrybutu jako wielka litera.

+0

Dobra uwaga. Dziękuję Ci. –

+0

Więc to nie znaczy, że musisz podać wartość @ Column dla innych niż prymitywne, prawda? .. – Amalgovinus

+1

Nie, jeśli nie podano adnotacji kolumny, stosowane są wartości domyślne (nazwa będzie atrybutem jeden). – Gab