---
# System prepended metadata

title: Annotation
tags: [Java, JPA, Spring]

---

# Annotation
###### tags: `JPA` `Spring` `Java` 
**@Entity** : 將Java類標示為實體類，將會對應到資料庫

**@Table** : 可指定與Java類不同名的table、catalog、schema

**@Id** : 主鍵

**@GeneratedValue** : 標示主鍵生成策略
	1. IDENTITY:自動增長 ( oracle不支援
	2. AUTO:JPA自動根據資料庫決定策略
	3. SEQYENCE:通過序列產生 透過@SequenceGenerator指定序列 ( ps Mysql不支援
	4. TABLE:通過表產生主鍵，框架藉由模擬序列產生主鍵使用該策略可以使應用更易於資料移植。

**@Basic** : 表示一個簡單屬性到資料庫屬性的對應，一個沒有任何註釋的getXXX()預設就是@Basic

**@Column** : 可以比Basic更精確的指定資料庫欄位，例如length、欄位名稱、nullable。另外還有一個屬性是columnDefinitaion，通常ORM框架會自動判斷類型但對於Date無法確定是Date，Time還是TimeStamp此外String預設是Varchar，如果要映射到clob或text時可使用。

**@Transient** : 標示為不需要映射到資料庫

**@Temporal** : 用調整日期的精度 TemporalType.(DATE、TIME、TIMESTAMP)



---
@GeneratedValue(strategy=GenerationType.Table....) 事例

	@TableGenerator(name="ID_GenerAtor",
	table="jpa_id_generator",//實際的Table
	pkColumnName="PK_NAME",
	pkColumnValue="CUSTOMER_ID",
	valueColumnName="PK_VALUE",
	allocationSize=2//每次跳幾步
	)
	@GeneratedValue(strategy=GenerationType.Table,generator="ID_GenerAtor")

	Table.jpa_id_generator
	col	ID		PK_NAME		 PK_VALUE
	row	 1		CUSTOMER_ID			1
---