
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方面有更深的理解。记住,保持好奇心和批判性思维,是成长为一名优秀开发者的关键。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年05月09日 21时25分38秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Mac隐藏辅助功能|自定义苹果Mac显示器
2019-03-14
ActivityNotFoundException异常错误
2019-03-14
elasticsearch 不能root启动
2019-03-14
git远程仓库切换
2019-03-14
国芯网国产芯片精选月刊V20190801 国产芯片 芯片选型 芯片厂家
2019-03-14
华大芯片调试问题
2019-03-14
DCMTK:存储服务类用户(C-STORE操作)
2019-03-14
带照片捕捉功能的ESP32-CAM PIR运动检测器
2019-03-15
如何使用SSH远程管理Linux服务器
2019-03-15
降级到旧版本macOS的3种方法
2019-03-15
学习Vue.js2.0(国外视频教程)
2019-03-15
在FPGA板上实现数字时钟的VHDL代码
2019-03-15
wxPython和PyOpenGL视频
2019-03-15
在30分钟内学习PHP
2019-03-15
Python http.server 服务器
2019-03-15
Python svm 支持向量机
2019-03-15
OpenStack 最小化安装配置(一):物理机网桥配置
2019-03-15
PS快速美白照片
2019-03-15
ubuntu 16.04 镜像下载
2019-03-15