JPA注解简介

17 篇文章 0 订阅
@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;  

@Column(name="Price", columnDefinition="Decimal(10,2) default '100.00'")
这样,对应字段就可以按照指定的精度进行insert。可以对double等数据处理。

@Temporal 
作用:设置日期时间

 

方式一:@Temporal(TemporalType.DATE)映射为日期 // birthday date (只有日期)
方式二:@Temporal(TemporalType.TIME)映射为日期 // birthday time (是有时间)
方式三:@Temporal(TemporalType.TIMESTAMP)映射为日期 //birthday datetime (日期+时间)

@Lob 
作用:设置大数据类型

 

方式一:

Java代码   收藏代码
  1. @Lob  
  2. private String text;   //text longtext  

方式二:

Java代码   收藏代码
  1. @Lob  
  2. private byte[] image;   // image longblob  


@Enumerated 
作用:设置枚举类型

 

方式一:

Java代码   收藏代码
  1. /** 保存字符串到数据库 */  
  2.     @Enumerated(EnumType.STRING)  
  3.     private Role role;  

方式二:

Java代码   收藏代码
  1. /** 保存整数到数据库 */  
  2.     @Enumerated(EnumType.ORDINAL)  
  3.     private Role role;  

上面定义的枚举:Role

Java代码   收藏代码
  1. /** 角色 */  
  2. public enum Role {  
  3.     游客, 会员, 管理员  
  4. }  

使用:

Java代码   收藏代码
  1. User user = new User();  
  2. user.setRole(Role.管理员);  

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

Java代码   收藏代码
  1. @Transient  
  2. private String temp;   

这样也可以:

Java代码   收藏代码
  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下面。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值