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

Hibernate學習筆記(四):多對一單向關聯映射與many-to-one自動維護外鍵

     編輯:Java 相關知識

Hibernate全面採用面向對象思維操作資料庫。本文講解多對一單向關聯映射——最基礎且常用的關聯類型。

業務場景與類圖

用戶與用戶組:一個用戶屬於一個組,一個組擁有多用戶 → 用戶:組 = 多:1。

實體類定義

public class Group {
    private int id; private String name; // getter/setter...
}

public class User {
    private int id; private String name;
    private Group group;  // 多端持有單端引用
    // getter/setter...
}

配置文件:hibernate.cfg.xml與hibernate.properties

標準MySQL配置,映射資源指向Tables.hbm.xml。

核心映射:many-to-one元素

<hibernate-mapping>
    <class name="com.bjpowernode.hibernate.User" table="t_user">
        <id name="id"><generator class="native"/></id>
        <property name="name"/>
        <!-- many-to-one:自動在t_user建外鍵groupid映射t_group.id -->
        <many-to-one name="group" column="groupid" cascade="save-update"/>
    </class>

    <class name="com.bjpowernode.hibernate.Group" table="t_group">
        <id name="id"><generator class="native"/></id>
        <property name="name"/>
    </class>
</hibernate-mapping>

cascade="save-update":保存/更新用戶時自動級聯保存/更新關聯組。

測試驗證:無需手動保存Group

public class Many2OneTest extends TestCase {
    public void testSave3() {
        Session session = HibernateUtils.getSession();
        session.beginTransaction();

        Group group = new Group(); group.setName("提高班");
        User user1 = new User(); user1.setName("張三"); user1.setGroup(group);
        User user2 = new User(); user2.setName("李四"); user2.setGroup(group);

        // 配置many-to-one後,無需手動 session.save(group)
        session.save(user1); session.save(user2);

        session.getTransaction().commit();
    }
}

執行結果:

核心價值

many-to-one配置後:

  • Hibernate自動管理外鍵groupid
  • 業務代碼零關注關係維護
  • 級聯操作自動處理關聯物件持久化
  • 刪除組前需先刪用戶(外鍵約束)等限制由框架透明化

這正是Hibernate魅力所在:關係由框架自動維護,開發者專注業務邏輯。

參考:一口一口吃掉Hibernate(四)

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