JPA之@Entity、@Table、@Column、@Id

Java Persistence API定义了一种定义,能够将常规的普通Java对象(有时被称做POJO)映射到数据库。
这些普通Java对象被称做Entity Bean。
除了是用Java Persistence元数据将其映射到数据库外,Entity Bean与其余Java类没有任何区别。
事实上,建立一个Entity Bean对象至关于新建一条记录,删除一个Entity Bean会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。java

Java Persistence API还定义了一种查询语言(JPQL),具备与SQL相相似的特征,只不过作了裁减,以便处理Java对象而非原始的关系表。数据库

注意:在Hibernate中也有@Entity和Table这两个注解,可是其中@Entity注解已经废弃,因此本文只分析JPA下的注解ui


首先看看个例子:spa

package com.xwj.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "xwj_user", schema = "test")
public class UserEntity {

    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid")
    @Column(name = "ID", unique = true, nullable = false, length = 32)
    private Integer id;

    @Column(name = "last_name")
    private String lastName;

    @Column(name = "email", length = 32)
    private String email;
    
    //TODO get和set方法略...
    
}

解释:.net

  @Entity 代表该类 (UserEntity) 为一个实体类,它默认对应数据库中的表名是user_entity。这里也能够写成hibernate

      @Entity(name = "xwj_user")code

      或者对象

      @Entity
      @Table(name = "xwj_user", schema = "test")
blog

      查看@Entity注解,发现其只有一个属性name,表示其所对应的数据库中的表名get

 

  @Table 当实体类与其映射的数据库表名不一样名时须要使用 @Table注解说明,该标注与 @Entity 注解并列使用,置于实体类声明语句以前,可写于单独语          句行,也可与声明语句同行。
      @Table注解的经常使用选项是 name,用于指明数据库的表名
      @Table注解还有两个选项 catalog 和 schema 用于设置表所属的数据库目录或模式,一般为数据库名

 

若是缺省@Table注解,则class字段名即表中的字段名,因此须要@Column注解来改变class中字段名与db中表的字段名的映射规则

@Column注释定义了将成员属性映射到关系表中的哪一列和该列的结构信息,属性以下:   1)name:映射的列名。如:映射tbl_user表的name列,能够在name属性的上面或getName方法上面加入;   2)unique:是否惟一;   3)nullable:是否容许为空;   4)length:对于字符型列,length属性指定列的最大字符长度;   5)insertable:是否容许插入;   6)updatetable:是否容许更新;   7)columnDefinition:定义建表时建立此列的DDL;   8)secondaryTable:从表名。若是此列不建在主表上(默认是主表),该属性定义该列所在从表的名字

  

若是是主键id,还会用到@Id注解

@Id注释指定表的主键,它能够有多种生成方式:   1)TABLE:容器指定用底层的数据表确保惟一;   2)SEQUENCE:使用数据库德SEQUENCE列莱保证惟一(Oracle数据库经过序列来生成惟一ID);   3)IDENTITY:使用数据库的IDENTITY列莱保证惟一;   4)AUTO:由容器挑选一个合适的方式来保证惟一;   5)NONE:容器不负责主键的生成,由程序来完成。

 

其中与@Id一块儿使用的还有另外两个注解:@GeneratedValue、@GenericGenerator,具体使用方法可参考hibernate中的@GeneratedValue与@GenericGenerator

相关文章
相关标签/搜索