Mam wątpliwości, ponieważ atrybut name występuje zarówno w @Entity, jak i @Table
Na przykład mogę mieć taką samą wartość atrybutu nazwy
@Entity(name = "someThing")
@Table(name = "someThing")
i mogę mieć różne nazwy dla tej samej klasy
@Entity(name = "someThing")
@Table(name = "otherThing")
Czy ktoś może mi powiedzieć, jaka jest różnica między tymi dwoma i dlaczego mamy ten sam atrybut w obu?
java
hibernate
jpa
annotations
persistence
Timotej Leginus
źródło
źródło
Odpowiedzi:
Tak więc w pierwszym przypadku twoja tabela i encja będą miały tę samą nazwę, która pozwoli ci uzyskać dostęp do twojej tabeli o tej samej nazwie co jednostka podczas pisania HQL lub JPQL.
A w drugim przypadku podczas pisania zapytań musisz użyć nazwy podanej w @Entity, a nazwa podana w @Table zostanie użyta do nazwania tabeli w DB.
Więc w HQL twoje coś będzie odnosić się do otherThing w bazie danych.
źródło
@Entity(name = "someThing")
=> ta nazwa będzie używana do identyfikacji domeny .. ta nazwa będzie identyfikowana tylko przezhql
zapytania ..ie .. nazwa obiektu domeny@Table(name = "someThing")
=> ta nazwa będzie używana do której tabeli odwołuje się obiekt domeny..ie .. nazwa tabeliźródło
@Entity
jest przydatny w przypadku klas modelu, aby wskazać, że jest to jednostka lub tabela@Table
służy do nadania tabeli dowolnej konkretnej nazwy, jeśli chcesz podać inną nazwęUwaga: jeśli nie korzystasz z
@Table
hibernacji, weź pod uwagę, że@Entity
jest to nazwa twojej tabeli i@Entity
musi@Entity @Table(name = "emp") public class Employee implements java.io.Serializable { }
źródło
@ Atrybut nazwy tabeli to rzeczywista nazwa tabeli. Nazwa @ Entitiy jest przydatna, jeśli masz dwie klasy @Entity o tej samej nazwie i potrzebujesz sposobu na ich rozróżnienie podczas wykonywania zapytań.
źródło