Namensattribut in @Entity und @Table

82

Ich habe Zweifel, weil das Namensattribut sowohl in @Entity als auch in @Table vorhanden ist

Zum Beispiel darf ich den gleichen Wert für das Namensattribut haben

@Entity(name = "someThing")
@Table(name = "someThing")

und ich kann auch verschiedene Namen für dieselbe Klasse haben

 @Entity(name = "someThing")
 @Table(name = "otherThing")

Kann mir jemand sagen, was der Unterschied zwischen diesen beiden ist und warum wir in beiden das gleiche Attribut haben?

Timotej Leginus
quelle
@Entity ist jetzt veraltet.
Philip Rego
8
@PhilipRego: Während Hibernates \ @Entity (dh org.hibernate.annotations.Entity) veraltet ist, ist JPAs \ @Entity (dh javax.persistence.Entity) lebendig und gesund.
David Siegal

Antworten:

102
@Entity(name = "someThing") => this name will be used to name the Entity
@Table(name = "someThing")  => this name will be used to name a table in DB

Im ersten Fall haben Ihre Tabelle und Ihre Entität denselben Namen, sodass Sie beim Schreiben von HQL oder JPQL auf Ihre Tabelle mit demselben Namen wie die Entität zugreifen können.

Und im zweiten Fall müssen Sie beim Schreiben von Abfragen den in @Entity angegebenen Namen verwenden, und der in @Table angegebene Name wird verwendet, um die Tabelle in der Datenbank zu benennen.

In HQL verweist Ihr someThing also auf otherThing in der DB.

Ankit
quelle
18

@Entity(name = "someThing")=> Dieser Name wird verwendet, um die Domäne zu identifizieren. Dieser Name wird nur durch hqlAbfragen identifiziert. dh .. Name des Domänenobjekts

@Table(name = "someThing") => Dieser Name wird verwendet, auf welche Tabelle sich das Domänenobjekt bezieht..ie ..name der Tabelle

Manbumihu Manavan
quelle
15

@Entity ist nützlich bei Modellklassen, um anzuzeigen, dass dies die Entität oder Tabelle ist

@Table wird verwendet, um Ihrer Tabelle einen bestimmten Namen zu geben, wenn Sie einen anderen Namen angeben möchten

Hinweis: Wenn Sie den @TableRuhezustand nicht verwenden, berücksichtigen Sie, dass dies @Entitystandardmäßig Ihr Tabellenname ist und @Entitymuss

@Entity    
@Table(name = "emp")     
public class Employee implements java.io.Serializable    
{

}
Bhuwan Tripathi
quelle
2

Das Namensattribut von @ Table ist der tatsächliche Tabellenname. Der Name von @ Entitiy ist nützlich, wenn Sie zwei @ Entity-Klassen mit demselben Namen haben und eine Möglichkeit benötigen, diese beim Ausführen von Abfragen zu unterscheiden.

Koralle
quelle
1
Wann haben Sie zwei Entitäten mit demselben Namen? Ist es, wenn die Klassennamen gleich sind, sich die Klassen jedoch in unterschiedlichen Paketen befinden (qualifizierte Namen sind unterschiedlich)?
Croraf