@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下面。