JPA实体注解(Entity Annotation)

选中文字可对指定文章内容进行评论啦,绿色背景文字可以点击查看评论额。

今天我们开始学习可以用在实体上的注解,一样的道理,我们还是先弄一张图:

按照难易程度,或者功能划分,我们分为三类,这样方便理解:

基本注解

映射关系注解

查询注解

 

这里我们按照功能分类,也会添加一些后续会使用的注解:比如@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不是还有很多其他属性吗?不用着急,我们用到的时候会慢慢更新哈。

版权声明:著作权归作者所有。

相关推荐

Kotlin使用kotlin-kapt插件支持Android的注解处理

在Kotlin可以使用kapt插件来支持Android的注解处理。在Gradle配置kotlin-kapt插件如下:在app的build.gradle添加插件apply plugin: 'kotlin-kapt' 使用kapt添加注解依赖java使用annotationProcessor 添加的依赖改为使用kapt。例如添加dagger依赖dependencies {

初识JPA

1、什么是JPA?        JPA的全称是Java Persistence API,翻译成中文就是java对象持久化应用程序接口。JPA是Sun公司在Java EE5中提出的java对象持久化应用程序接口。2、JPA的优势是什么?标准化对容器级特性支持简单易用,集成方便可媲美JDBC的查询能力支持面向对象的高级特性3、JPA的缺点是什么?性能不好?学习

JPA实体状态深入理解

我们在学习JPA实体状态的时候,常常会问,JPA的实体有多少状态呢?相信这个问题不难回答:瞬时态(transient)托管态(persistent)游离态(detached)移除态(removed)注意:这里最后一个移除态,有的时候也叫删除态(deleted),至于它和移除态有啥区别,暂时没有想到,如果您对此有更加深刻的理解,请留言回复。为什么会有这四种状态呢?啥,这个也有为啥,网上不是都这么说的

JPA实体状态学习-(瞬时态:Transient)

为了学习实体的状态,我们还是贴出这张实体状态转换迁移图:Transient(瞬时态)按照上图的描述,java对象在内存中被赋值后,没有调用entityManager.persist()方法之前实体对象所处的状态就是瞬時態举个例子:Teacher teacher = new Teacher("email@dot.com");此时,实例teacher就处于new/transient态(备注:这里的ne

JPA实体状态学习-(持久态:Persistent)

今天我们继续学习JPA的实体状态转化,老规矩贴上实体转化的转化图: 上一节我们学习了:entityManager调用persist()方法后,实体的状态从transient到persistent,这个时候对persistent状态的实体改变也会同步持久化到数据库,执行tx.commit()之后实体进入detached状态,此时对实体进行改变后不会同步到数据库。今天我们来看看transie

JPA实体状态学习-(游离态:Detached)

今天我们学习另一种实体状态,老规矩还是先上图:Detached(游离态 unmanaged)An Object becomes detached when the currently running Persistence Context is closed. Any changes made to detached objects are no longer automatically prop