Czym różnią się adnotacje w JPA od @Column
i @Basic
? Czy można ich używać razem? Powinno się używać razem? A może jeden z nich wystarczy?Java Persistence/JPA: @Column vs @Basic
Odpowiedz
@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.
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.
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.
Dobra uwaga. Dziękuję Ci. –
Więc to nie znaczy, że musisz podać wartość @ Column dla innych niż prymitywne, prawda? .. – Amalgovinus
Nie, jeśli nie podano adnotacji kolumny, stosowane są wartości domyślne (nazwa będzie atrybutem jeden). – Gab
- 1. Qt5 QML, kiedy używać kolumny ColumnLayout vs Column?
- 2. SQL: kolumna klucza głównego. Sztuczne „id” column vs „naturalne” kolumny
- 3. Bang vs Default Właściwość w języku Visual Basic
- 4. Gnuplot Cumulative Column Question
- 5. laravel: Unknown column „updated_at”
- 6. Grails multi column indexes
- 7. Lista Java vs ArrayList
- 8. java: Class.isInstance vs Class.isAssignableFrom
- 9. Logowanie Java vs Log4J
- 10. Java: ArrayBlockingQueue vs. LinkedBlockingQueue
- 11. Java JRE vs GCJ
- 12. Java: LockSupport.parkNanos vs Thread.Sleep (...)
- 13. Java Thread.stop() vs Thread.interrupt()
- 14. Java CachedThreadPool vs FixedThreadPool
- 15. Java: CopyOnWriteArrayList vs synchronizedList
- 16. Metody Java vs. funkcje
- 17. Struts vs Zend? Java vs PHP?
- 18. jQGrid Column Chooser Modal Overlay
- 19. zasoby wizualne studio past column
- 20. Adnotacja SpringData Mongo @ Column (@Property?)
- 21. SQL SELECT DOŁĄCZ COLUMN ALIAS
- 22. PostgreSQL Big Text Column Performance
- 23. Kendo Grid Column Width + Scrollable
- 24. PostgreSQL column 'foo' nie istnieje
- 25. Freeze excel column z C#
- 26. NodeJS Basic FileIO
- 27. Casting in visual basic?
- 28. PHP: HTTP Basic - Wylogowanie
- 29. git basic setup
- 30. basic o "użyciu" konstrukcji
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ę? –
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
@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 –