天天看点

JPA注解简介

@Entity  

作用:设置一个类为实体类

@Table 

作用:设置实体类对应的表,常与@Entity一起使用

参数:name制定表名,不写的话,为实体类的类名

@Id 

作用:设置对象标识符

@GeneratedValue 

作用:设置标识符的生成策略,常与@Id一起使用

参数:strategy指定具体的生成策略

@GeneratedValue(strategy=GenerationType.AUTO) 使用数据库默认配置。

@GeneratedValue(strategy = GenerationType.IDENTITY)指定“自动增长”策略,适用于MySQL。

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_tbl_user")指定“序列”策略,适用于Oracle。 

  1. @Entity  
  2. @Table(name = "tbl_user")  
  3. public class User {  
  4.  @Id
  5.  @GeneratedValue 
  6.  private Integer id;
  7. }  

@Column 

作用:设置列

参数:

name:指定列名

unique:指定唯一约束

nullable:指定是否允许为空

inserttable:是否可以插入  

updateable:是否可以更新  

columnDefinition: 定义建表时创建此列的DDL  

length:长度

  1. @Column(name = "user_name", length = 255, nullable = true, unique = true)  
  2. private String name;  

这样,对应字段就可以按照指定的精度进行insert。可以对double等数据处理。

@Temporal 

作用:设置日期时间

方式一:@Temporal(TemporalType.DATE)映射为日期 // birthday date (只有日期)

方式二:@Temporal(TemporalType.TIME)映射为日期 // birthday time (是有时间)

方式三:@Temporal(TemporalType.TIMESTAMP)映射为日期 //birthday datetime (日期+时间)

@Lob 

作用:设置大数据类型

方式一:

Java代码  

JPA注解简介
  1. @Lob  
  2. private String text;   //text longtext  

方式二:

Java代码  

JPA注解简介
  1. @Lob  
  2. private byte[] image;   // image longblob  

@Enumerated 

作用:设置枚举类型

方式一:

Java代码  

JPA注解简介
  1.     @Enumerated(EnumType.STRING)  
  2.     private Role role;  

方式二:

Java代码  

JPA注解简介
  1.     @Enumerated(EnumType.ORDINAL)  
  2.     private Role role;  

上面定义的枚举:Role

Java代码  

JPA注解简介
  1. public enum Role {  
  2.     游客, 会员, 管理员  
  3. }  

使用:

Java代码  

JPA注解简介
  1. User user = new User();  
  2. user.setRole(Role.管理员);  

@Transient 

作用:修饰的字段不会被持久化

Java代码  

JPA注解简介
  1. @Transient  
  2. private String temp;   

这样也可以:

Java代码  

JPA注解简介
  1. private transient String temp;  

以上都这都是比较常用的。

 @OrderBy(name = "group_name ASC, name DESC")    

 @OneToMany(cascade = CascadeType.ALL, mappedBy = "oneId")//指向多的那方的pojo的关联外键字段 

@ManyToMany       

@JoinTable(name = "TMANY1_TMANY2", joinColumns = {@JoinColumn(name = "MANYA_ID", referencedColumnName = "MANYA_ID")

@Pattern String 

通过正则表达式来验证字符串 

@Pattern(regex="[a-z]{6}") 

@Email 

@Min 

@Max 

@JoinColumn标记

GenerateValue的机制 strategy

比较特殊的地方

1. 使用UUID(两个不同实现版本Hibernate和OpenJPA有点不同)

  OpenJPA

   @GeneratedValue(strategy=GenerationType.AUTO, generator = "uuid")

  Hibernate(Eclipse会提示错误,但是程序是可以运行的)

   @GenericGenerator(name = "test", strategy = "uuid")

   @GeneratedValue(generator = "test")

  其实这两种办法我感觉都不是特别好,因为他们跟实现有关系,将来如果要迁移的话会比较麻烦,所以可以直接用java.util.UUID

   user.setUserId(UUID.randomUUID().toString());

2.使用@GeneratedValue(strategy=GenerationType.IDENTITY)

  需要在数据库(Derby)中这样定义字段

  USER_ID  BIGINT  NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)

3.如果使用数据库表的字段生成---GenerationType.TABLE

  对于Hibernate,需要创建生成主键的表,但是OpenJPA不需要,如果没有会自动生成。

  代码如下:

   @TableGenerator(name = "test111", table = "IDTABLE",

                pkColumnName = "KEYID", valueColumnName = "KEYVALUE", pkColumnValue = "TestUSER_ID")

   @GeneratedValue(strategy=GenerationType.TABLE, generator="test111")

   CREATE TABLE IDTABLE (

    KEYID VARCHAR(255) NOT NULL,

    KEYVALUE BIGINT,

    PRIMARY KEY (KEYID)

   )

以上的注解全部定义在javax.persistence下面。