Thuộc tính tên trong @Entity và @Table


82

Tôi nghi ngờ vì thuộc tính name có trong cả @Entity và @Table

Ví dụ: tôi được phép có cùng một giá trị cho thuộc tính name

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

và tôi cũng có thể có các tên khác nhau cho cùng một lớp

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

Ai có thể cho tôi biết sự khác biệt giữa hai điều này là gì và tại sao chúng tôi có cùng thuộc tính trong cả hai?


@Entity hiện không được dùng nữa.
Philip Rego

8
@PhilipRego: Trong khi \ @Entity của Hibernate (tức là org.hibernate.annotations.Entity) không được dùng nữa, thì \ @Entity của JPA (tức là javax.persistence.Entity) vẫn hoạt động tốt.
David Siegal

Câu trả lời:


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

Vì vậy, trong trường hợp đầu tiên, bảng và thực thể của bạn sẽ có cùng tên, điều đó sẽ cho phép bạn truy cập bảng của mình có cùng tên với thực thể trong khi viết HQL hoặc JPQL.

Và trong trường hợp thứ hai trong khi viết các truy vấn, bạn phải sử dụng tên được cung cấp trong @Entity và tên được cung cấp trong @Table sẽ được sử dụng để đặt tên cho bảng trong DB.

Vì vậy, trong HQL, someThing của bạn sẽ tham chiếu đến otherThing trong DB.


18

@Entity(name = "someThing")=> tên này sẽ được sử dụng để xác định miền .. tên này sẽ chỉ được xác định bởi hqlcác truy vấn ..ie ..name của đối tượng miền

@Table(name = "someThing") => tên này sẽ được sử dụng cho bảng nào được tham chiếu bởi đối tượng miền..ie ..name của bảng


15

@Entity hữu ích với các lớp mô hình để biểu thị rằng đây là thực thể hoặc bảng

@Table được sử dụng để cung cấp bất kỳ tên cụ thể nào cho bảng của bạn nếu bạn muốn cung cấp bất kỳ tên nào khác

Lưu ý: nếu bạn không sử dụng @Tablethì hibernate hãy coi đó @Entitylà tên bảng của bạn theo mặc định và @Entityphải

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

}

2

Thuộc tính @ Table's name là tên bảng thực tế. Tên @ Entitiy rất hữu ích nếu bạn có hai lớp @Entity có cùng tên và bạn cần một cách để phân biệt chúng khi chạy truy vấn.


1
Khi nào bạn có hai thực thể có cùng tên? Có phải khi tên lớp bằng nhau, nhưng các lớp nằm trong các gói khác nhau (tên đủ điều kiện là khác nhau)?
croraf
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.