实体和 Table 注释。了解它们之间的确切区别

Entity and Table annotations. Understanding the exact differences between them

我正在学习休眠,对 Entity 和 Table 之间的区别以及它们的工作方式有一些疑问 together/independently?

案例一:

@Entity
public class Person{
}

My understanding - 
Entity name - Person
Table name in db - person

案例二:

@Entity(name = "people")
public class Person{
}

My understanding - 
Entity name - people
Table name in db - people

案例三:

@Entity
@Table(name="people")
public class Person{
}

My understanding - 
Entity name - Person
Table name in db - people

案例四:

@Entity(name = "person")
@Table(name = "people")
public class Person{
}

My understanding - 
Entity name - person
Table name in db - people

案例五:

@Table(name="people")
public class Person{
}

My understanding - 
Entity name - ??
Table name in db - people

我对这五个案例的理解正确吗?关于 Entity 和 Table 的工作还有什么我应该知道的吗?

@Entity用于声明一个class可以被Hibernate管理。它还通过其 name 属性定义实体名称,这是我们在编写 JPQL/HQL 查询时引用的名称。如果未指定实体名称,则默认为该实体的非限定名称 class.

例如:

@Entity(name="People")
public class Person{
}

然后我需要在编写JPQL/HQL查询时使用People来引用这个实体:

select p from People p;

@Table 定义 @Entity 通过其名称属性映射到的实际数据库 table 名称。如果未指定,其默认值将等于实体名称(即 @Entityname 属性)

此外,@Table 只有在定义了 @Entity 时才有意义。否则,仅定义 @Table 而不定义 @Entity(即情况 5)没有任何效果。


总结如下:

案例一:

@Entity
public class Person {

}

Entity name = Person
DB Table name = Person

案例二:

@Entity(name = "people")
public class Person {
}

Entity name = people
DB Table name  = people

案例三:

@Entity
@Table(name="people")
public class Person{

}

Entity name = Person
DB Table name =  people

案例四:

@Entity(name = "person")
@Table(name = "people")
public class Person{
}

Entity name = person
DB Table name = people

案例 5:无效