Odpowiedzi:
@Basic
oznacza, że atrybut ma zostać utrwalony i ma zostać użyte standardowe mapowanie. Ma parametry, które pozwalają określić, czy atrybut ma być ładowany leniwie i czy dopuszcza wartość null.
@Column
umożliwia określenie nazwy kolumny w bazie danych, w której atrybut ma zostać utrwalony.
Jeśli podasz jedno 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 atrybutu i określić nazwę kolumny, możemy powiedzieć
@Basic(fetch=FetchType.LAZY)
@Column(name="WIBBLE")
Gdybyśmy potrzebowali domyślnego, nie leniwego zachowania, wystarczyłoby tylko @Column
to.
Poza użytkownika @ djna odpowiedzi , warto zauważyć, że @Basic
powinny być porównywane z @OneToMany
, @ManyToOne
i @ManyToMany
. W każdej właściwości można określić tylko jeden z nich.
@Column
i @JoinColumn
można je określić razem z dowolnymi z nich, aby opisać właściwości kolumny bazy danych.
Są to dwa zestawy adnotacji, których można używać razem, ale jednocześnie można używać tylko jednej adnotacji z każdego zestawu.
Warto zauważyć, że Basic jest przeznaczony dla pól prymitywnych
http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes
Atrybut podstawowy to taki, w którym klasa atrybutu jest typem prostym, takim jak String, Number, Date lub prymityw. Wartość atrybutu podstawowego może być odwzorowywana bezpośrednio na wartość kolumny w bazie danych.
Obsługiwane typy i konwersje zależą od implementacji JPA i platformy bazy danych. Każdy atrybut podstawowy korzystający z typu, który nie jest mapowany bezpośrednio na typ bazy danych, można serializować do binarnego typu bazy danych.
Najłatwiejszym sposobem zmapowania podstawowego atrybutu w JPA jest nic nie robić. Wszelkie atrybuty, które nie mają innych adnotacji i nie odwołują się do innych jednostek, zostaną automatycznie zamapowane jako podstawowe, a nawet serializowane, jeśli nie są typem podstawowym. Domyślna nazwa kolumny dla atrybutu, taka sama jak nazwa atrybutu, będzie pisana wielkimi literami.
Adnotacje @Basic są stosowane do jednostek JPA, a atrybuty @Column są stosowane do kolumn bazy danych. Opcjonalny atrybut adnotacji @Basic określa, czy pole encji może mieć wartość null, czy nie; z drugiej strony,
@Basic
bez@Column
, dlatego właściwościoptional
inullable
istnieją w obu. Czy mam rację?