首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

JPA 規範與 Hibernate 實戰:註解映射、實體關聯、驗證與核心 API 完整指南

     編輯:Java 綜合教學

JPA 規範與 Hibernate 實戰:註解映射、實體關聯、驗證與核心 API 完整指南

JPA (Java Persistence API) 是 Java EE 官方持久化規範,Hibernate 是其主流實現。使用 JPA 註解可屏蔽具體 ORM 框架差異,便於遷移。本文系統整理 JPA 核心註解、關聯映射、Bean Validation 整合及 EntityManager API。

JPA 開發四步驟

  1. 引入依賴:hibernate-entitymanager、javax.persistence-api 等
  2. 編寫 META-INF/persistence.xml 配置持久化單元
  3. 定義實體類(JPA 註解)
  4. 使用 EntityManager API 操作數據

persistence.xml 示例

<persistence xmlns="https://java.sun.com/xml/ns/persistence" version="1.0">
  <persistence-unit name="mysqlJPA" transaction-type="RESOURCE_LOCAL">
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
      <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/hibernate_db"/>
      <property name="hibernate.connection.username" value="root"/>
      <property name="hibernate.connection.password" value="root"/>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
      <property name="hibernate.show_sql" value="true"/>
    </properties>
  </persistence-unit>
</persistence>

實體類與核心註解速查

註解用途關鍵屬性
@Entity聲明實體類name(可選)
@Table映射表信息name, catalog, schema
@Id主鍵字段—
@GeneratedValue主鍵生成策略strategy (AUTO/IDENTITY/SEQUENCE/TABLE), generator
@Column列詳細定義name, nullable, unique, length, precision, scale, columnDefinition
@Basic基本屬性映射fetch (EAGER/LAZY), optional
@Transient非持久化字段—
@Temporal日期時間類型DATE/TIME/TIMESTAMP
@Lob大對象—(配合 @Column 區分 BLOB/CLOB)
@OrderBy集合加載排序如 "name ASC, id DESC"
@MappedSuperclass父類註解繼承—
@Embeddable/@Embedded可嵌入類/字段—

主鍵生成策略示例

// IDENTITY:依賴數據庫自增
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="user_id") private int userId;

// TABLE:通用表生成,適合遷移
@Id @GeneratedValue(strategy=GenerationType.TABLE)
@Column(name="user_code") private String userCode;

// SEQUENCE:Oracle/PostgreSQL 序列
@Id @GeneratedValue(strategy=GenerationType.SEQUENCE)
@SequenceGenerator(name="seq_user")
@Column(name="user_id") private int userId;

關聯映射註解

關聯類型擁有方註解反向/被擁有方註解關鍵點
多對一@ManyToOne@OneToMany(mappedBy="...")多方持有外鍵,@JoinColumn 定義列
一對一@OneToOne + @JoinColumn@OneToOne(mappedBy="...")共享主鍵或外鍵唯一約束
一對多@OneToMany@ManyToOne建議多方為擁有方
多對多@ManyToMany + @JoinTable@ManyToMany(mappedBy="...")中間表由 @JoinTable 定義

多對一 / 一對多示例

// 多方 OrderItem
@ManyToOne
@JoinColumn(name="order_id")
private UserOrder userOrder;

// 一方 UserOrder
@OneToMany(mappedBy="userOrder", cascade=CascadeType.ALL, orphanRemoval=true)
private Set<OrderItem> orderItems = new HashSet<>();

一對一示例(共享主鍵)

// 主方 Boy
@OneToOne(mappedBy="boy", cascade=CascadeType.ALL)
private Girl girl;

// 從方 Girl
@Id
@OneToOne
@JoinColumn(name="boy_id")
private Boy boy;

多對多示例

// Student
@ManyToMany
@JoinTable(name="stu_course",
  joinColumns=@JoinColumn(name="s_id"),
  inverseJoinColumns=@JoinColumn(name="c_id"))
private Set<Course> courses = new HashSet<>();

// Course
@ManyToMany(mappedBy="courses")
private Set<Student> students = new HashSet<>();

EntityManager 核心 API

  • persist(entity):保存(相當於 save)
  • merge(entity):合併游離態(相當於 update/saveOrUpdate)
  • remove(entity):刪除
  • find(Class, id):按主鍵查詢
  • createQuery(jpql):JPQL 查詢
  • getTransaction():事務控制

Hibernate Validator 驗證註解(JSR-303/380)

註解適用類型說明
@NotNull任意非 null
@NotEmpty集合/數組/字符串非空
@NotBlank字符串非空且含非空白字符
@Size(min,max)集合/數組/字符串長度範圍
@Min/@Max數值最小/最大值
@Pattern(regex)字符串正則匹配
@Email字符串郵箱格式
@Past/@Future日期過去/未來時間
@Range(min,max)數值範圍(Hibernate 擴展)

所有註解支持 message 屬性自定義錯誤消息,可組合使用。

總結

JPA 註解提供標準化 ORM 映射,Hibernate 作為實現完美支持並擴展。掌握核心註解(@Entity/@Id/@Column/@*To*)、關聯映射擁有方原則、主鍵生成策略選型、EntityManager API 及 Bean Validation 整合,即可構建可移植、可維護的持久層。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved