主要内容 冬实体的状态及操作: 实体主键与实体属性: ·主键生成策略,复合主键,嵌入式主键 。 实体属性:类型、加载方式等 实体关系映射: ·关联关系:一对一、一对多与多对一、多对多 继承关系: 冬JPA查询语言 (JPQL): ·使用查询对象完成查询 ·处理查询结果 ·使用标准SQL语句 条件查询、关系查询等 JPA进阶 011.。 西北农林科教大学信息工程学院本科生课程
❖ 实体的状态及操作: ❖ 实体主键与实体属性: • 主键生成策略,复合主键,嵌入式主键 • 实体属性:类型、加载方式等 ❖ 实体关系映射: • 关联关系:一对一、一对多与多对一、多对多 • 继承关系: ❖ JPA查询语言 (JPQL): • 使用查询对象完成查询 • 处理查询结果 • 使用标准SQL语句 • 条件查询、关系查询等 JPA进阶 •11 信息工程学院本科生课程 主要内容
实体主键生成策略 实体主键由@|d声明,为实体的唯一标识,用于区 分不同实体。(教材p326-327) @id public String getBookid({ return bookid; 实体主键的生成策略由@GeneratedValue(stragety=… generator=…)来标注,有以下几种: ● 表生成策略:GenerationType.TABLE;(所有DB) ·自增策略-GenerationType.AUTO;(MySQL) ·序列策略-GenerationType.SEQUENCE;(0 racle/DB2) ·身份列策略-Generat ionType.IDENTITY。(SQL Server) JPA进阶 ·12。西北农林升教大学信息工程学院本科生课程
❖ 实体主键由@Id声明,为实体的唯一标识,用于区 分不同实体。(教材p326-327) @id public String getBookid() { return bookid; } ❖ 实体主键的生成策略由@GeneratedValue (stragety=… generator=…) 来标注,有以下几种: • 表生成策略:GenerationType.TABLE;(所有DB) • 自增策略 - GenerationType.AUTO;(MySQL) • 序列策略 - GenerationType.SEQUENCE;(Oracle/DB2) • 身份列策略–GenerationType.IDENTITY。(SQL Server) 实体主键生成策略 JPA进阶 •12 信息工程学院本科生课程
表生成策略 ”数据库中单独使用一张表来存放表的主健,每次都 从该表中查询获取主健值。该方法兼容性好。 ~为使用表生成策略,需先创建用于存储主键的表, 多个表可共享该存储主键的表。该表至少应包括两 列,分别用于存储主键的名称和主键的值。每个表 的主键存储一行。(p353中表29.1及SQL脚本) 冬采用表生成策略,需设置两方面的内容: 。定义主键生成器-@TableGenerator; 。声明采用表生成策略生成主键-@GeneratedValue。 JPA进阶 ·13.品北农林科大学信息工程学院本科生课程
❖ 数据库中单独使用一张表来存放表的主键,每次都 从该表中查询获取主键值。该方法兼容性好。 ❖ 为使用表生成策略,需先创建用于存储主键的表, 多个表可共享该存储主键的表。该表至少应包括两 列,分别用于存储主键的名称和主键的值。每个表 的主键存储一行。(p353中表29.1及SQL脚本) ❖ 采用表生成策略,需设置两方面的内容: • 定义主键生成器 - @TableGenerator; • 声明采用表生成策略生成主键 - @GeneratedValue。 表生成策略 JPA进阶 •13 信息工程学院本科生课程
定义主键生成器 冬使用@TableGenerator定义表生成策略及其具体的 设置,供后面声明主健生成策略时使用。示例如下: @TableGenerator(name="book_gen", table="id table", p354中关于@TableGenerator pkColumnName="id_name", 注解属性说明以及图29.1。 valueColumnName="id_value" pkColumnValue="BOOK ID" 表生成策略的主键生成器 initialValue=11 与主键表的对应关系 allocationSize=1 pkColumnName. valueColumnName id name id value pkColumn Value. CUSTOMER ID 1 BOOK ID ORDER ID JPA进阶 14,西北农林升技大学信息工程学院本科生课程
❖ 使用@TableGenerator定义表生成策略及其具体的 设置,供后面声明主键生成策略时使用。示例如下: @TableGenerator(name= "book_gen", table="id_table", pkColumnName="id_name", valueColumnName="id_value", pkColumnValue="BOOK_ID", initialValue=11 allocationSize=1 ) 定义主键生成器 JPA进阶 •14 信息工程学院本科生课程 表生成策略的主键生成器 与主键表的对应关系 p354中关于@TableGenerator 注解属性说明以及图29.1
声明主键生成策略为表生成策略 将@GeneratedValue的strategy.属性的值设置为 Generat ionType..TABLE,generator,属性的值设置 为之前定义的生成器book_gen。具体如下: @Id @GeneratedValue(strategy=GenerationType.TABLE, generator="book_gen") public Integer getId(){ return this.id; ?插入数据时无需为主健列赋值。如: User user new User(); user.setUsername("lixucheng"); em.persist(user); JPA进阶 ·15。品北农林科大学信息工程学院本科生课程
❖ 将@GeneratedValue的strategy属性的值设置为 GenerationType.TABLE,generator属性的值设置 为之前定义的生成器book_gen。具体如下: @Id @GeneratedValue(strategy=GenerationType.TABLE, generator="book_gen") public Integer getId() { return this.id; } ❖ 插入数据时无需为主键列赋值。如: User user = new User(); user.setUsername("lixucheng"); em.persist(user); 声明主键生成策略为表生成策略 JPA进阶 •15 信息工程学院本科生课程