JPA学习笔记二:jpa注解学习,以及TABLE主键生成策略
发布日期:2021-05-28 16:48:25 浏览次数:30 分类:精选文章

本文共 1589 字,大约阅读时间需要 5 分钟。

JPA学习笔记:深入理解JPA注解及其应用

作为一名新手,你可能对JPA感到有些困惑,特别是面对众多注解充斥在代码中。别担心,以下将为你逐步解读JPA核心注解,帮助你在实践中游刃有余地应用这些内味。

1. @Entity

@Entity是JPA中的基础注解,用于标注实体类。应用这个注解后,类将被视为真实的潜在实体,与数据库表建立映射关系。注意事项:如果没有使用@Table注解,默认类名将作为表名使用。

2. @Table

@Table注解用于指定与数据库表的映射关系,可以与@Entity一起使用。以下是关键点:

  • name属性:若不指定,默认使用表名匹配。
  • 特殊情况建议:不同表名与类名不一致时,务必使用@Table注解。

3. 主键引导与生成

主键是数据建模的重要部分,JPA为此提供了多种注解和策略。

(1) @Id

@Id注解标注属性或方法,用于映射主键字段。一般写在属性定义前,或者@Basic注解后的get方法前。注意:与@Basic注解无关时,应避免重复使用。

(2) @GeneratedValue

控制主键生成策略。策略类型包括:

  • IDENTITY:利用数据库自增功能。
  • AUTO:JPA自动选择最适策略。
  • SEQUENCE:结合@SequenceGenerator指定序列名称,支持MySQL。
  • TABLE:通过表生成主键,支持跨数据库移植。

4. 属性映射与限定

(1) @Basic

@Basic为默认注解,处理非特定属性映射。参数:

  • fetch:EAGER(立即加载)或LAZY(延迟加载)。
  • optional:属性允许为空。

(2) @Column

@Column用于细化字段属性,关键点包括:

  • columnDefinition:定 arity或类型细节(特别是处理时间类型)。
  • nullable:允许字段为空。
  • unique:约束字段唯一性。

(3) @Transient

@Transient香港映射字段到数据库,该属性存储在内存中。

(4) @Temporal

用于处理日期、时间等精度。可选TemporalType指定精度。

5. 主键生成策略(@GeneratedValue)

(1) TABLE策略

创建表生成主键。功能对比:

  • 无需数据库支持,如MySQL。
  • 适用于复杂场景下的主键生成。

配置示例::

@Entity@Table(name="CUSTOMER")@Id@Sequence(name="ID_GENERATOR",          table="JPA_ID_GENERATORS",          pkColumnName="PK_NAME",          pkColumnValue="CUSTOMER_ID",         valueColumnName="PK_VALUE",         allocationSize=100)@GeneratedValue(strategy=GenerationType.TABLE, generator="ID_GENERATOR")public class Customer {    //...其他属性}

(2) 序列生成

你或许会疑惑何为序列生成。它类似于高度可控的主键生成,用处在于保证主键的全局唯一性。

6. 小结与实际应用

在实际应用中:

  • 首先确保@entity和@Table正确使用。
  • 主键注解根据数据库选择适用策略最为重要。
  • 小心处理@basic的fetch和optional参数,避免无意义的数据带来性能瓶颈。
  • 为更复杂的场景设定@Sequence或@Table策略,提升应用可移植性和稳定性。

坚持练习,多看源码,多写代码,把理论与实践相结合,你将在JPA方面有更深的理解。记住,保持好奇心和批判性思维,是成长为一名优秀开发者的关键。

上一篇:JPA学习笔记三:JPA的API学习
下一篇:正则表达式搜集

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年05月09日 21时25分38秒