今天我们开始学习可以用在实体上的注解,一样的道理,我们还是先弄一张图:
按照难易程度,或者功能划分,我们分为三类,这样方便理解:
基本注解
映射关系注解
查询注解
这里我们按照功能分类,也会添加一些后续会使用的注解:比如@EbeddedId,@IdClass
等。
我们先来看看注解@Entity
public @interface Entity {
/**
* (Optional) The entity name. Defaults to the unqualified
* name of the entity class. This name is used to refer to the
* entity in queries. The name must not be a reserved literal
* in the Java Persistence query language.
*/
String name() default "";
}
此注解用于指明实体的名称,此名称在JPQL查询的时候使用。看到这里的时候,我想大家应该和我一样,这个name属性和@Table注解的name属性有啥区别呢?
我们再来看看注解@Table
public @interface Table {
/**
* (Optional) The name of the table.
* <p> Defaults to the entity name.
*/
String name() default "";
/** (Optional) The catalog of the table.
* <p> Defaults to the default catalog.
*/
String catalog() default "";
/** (Optional) The schema of the table.
* <p> Defaults to the default schema for user.
*/
String schema() default "";
/**
* (Optional) Unique constraints that are to be placed on
* the table. These are only used if table generation is in
* effect. These constraints apply in addition to any constraints
* specified by the <code>Column</code> and <code>JoinColumn</code>
* annotations and constraints entailed by primary key mappings.
* <p> Defaults to no additional constraints.
*/
UniqueConstraint[] uniqueConstraints() default {};
/**
* (Optional) Indexes for the table. These are only used if
* table generation is in effect. Note that it is not necessary
* to specify an index for a primary key, as the primary key
* index will be created automatically.
*
* @since Java Persistence 2.1
*/
Index[] indexes() default {};
}
可以看出,@Table注解属性全部都是可选的,也就是在大部分情况下,我们至多设置一个name属性。
如果你有一个注解
@Entity
Public class Teacher() {
}
此时将创建一个Teacher表,同时实体的名称为Teacher
在JPQL中,您始终使用实体名称,默认情况下它是类名称。
select * from Teacher
如果你有如下的注解
@Entity( name = "TeacherName")
@Table( name = "TeacherTableName")
Public class Teacher() {
}
此时将创建一个TeacherTableName的表和TeacherName的实体,
在JPQL中的查询情况是:
select * from TeacherName
这里给大家一个小的建议,当你需要查询的时候,提醒一下自己,是直接写SQL还是通过实体查询,后面我们学习理解JPQL的时候会详细学习。这里提前说一嘴哈。
也许还有同学会问,@Table不是还有很多其他属性吗?不用着急,我们用到的时候会慢慢更新哈。