@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。
- @Entity
- @Table(name = "tbl_user")
- public class User {
- @Id
- @GeneratedValue
- private Integer id;
- }
@Column
作用:设置列
参数:
name:指定列名
unique:指定唯一约束
nullable:指定是否允许为空
inserttable:是否可以插入
updateable:是否可以更新
columnDefinition: 定义建表时创建此列的DDL
length:长度
- @Column(name = "user_name", length = 255, nullable = true, unique = true)
- private String name;
这样,对应字段就可以按照指定的精度进行insert。可以对double等数据处理。
@Temporal
作用:设置日期时间
方式一:@Temporal(TemporalType.DATE)映射为日期 // birthday date (只有日期)
方式二:@Temporal(TemporalType.TIME)映射为日期 // birthday time (是有时间)
方式三:@Temporal(TemporalType.TIMESTAMP)映射为日期 //birthday datetime (日期+时间)
@Lob
作用:设置大数据类型
方式一:
Java代码
- @Lob
- private String text; //text longtext
方式二:
Java代码
- @Lob
- private byte[] image; // image longblob
@Enumerated
作用:设置枚举类型
方式一:
Java代码
- @Enumerated(EnumType.STRING)
- private Role role;
方式二:
Java代码
- @Enumerated(EnumType.ORDINAL)
- private Role role;
上面定义的枚举:Role
Java代码
- public enum Role {
- 游客, 会员, 管理员
- }
使用:
Java代码
- User user = new User();
- user.setRole(Role.管理员);
@Transient
作用:修饰的字段不会被持久化
Java代码
- @Transient
- private String temp;
这样也可以:
Java代码
- 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}")
@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下面。