天天看點

hibernate 一對多_Hibernate(十一)- 關系 - 實作一對多

一個Product對應一個Category

一個Category對應多個Product

是以Category和Product是

一對多

的關系

本例講解如何使用Hibernate實作一對多關系

步驟1:先運作,看到效果,再學習 步驟2:模仿和排錯 步驟3:效果 步驟4:為Category增加一個Set集合 步驟5:為Category.hbm.xml增加one-to-many映射 步驟6:TestHibernate 測試one-to-many關系 步驟 1 : 先運作,看到效果,再學習

老規矩,先下載下傳下載下傳區(點選進入)的可運作項目,配置運作起來,确認可用之後,再學習做了哪些步驟以達到這樣的效果。

步驟 2 : 模仿和排錯

在確定可運作項目能夠正确無誤地運作之後,再嚴格照着教程的步驟,對代碼模仿一遍。

模仿過程難免代碼有出入,導緻無法得到期望的運作結果,此時此刻通過比較

正确答案

( 可運作項目 ) 和自己的代碼,來定位問題所在。

采用這種方式,

學習有效果,排錯有效率

,可以較為明顯地提升學習速度,跨過學習路上的各個檻。

推薦使用diffmerge軟體,進行檔案夾比較。把你自己做的項目檔案夾,和我的可運作項目檔案夾進行比較。

這個軟體很牛逼的,可以知道檔案夾裡哪兩個檔案不對,并且很明顯地标記出來

這裡提供了綠色安裝和使用教程:diffmerge 下載下傳和使用教程

步驟 3 : 效果

擷取id=1分類下的所有商品

hibernate 一對多_Hibernate(十一)- 關系 - 實作一對多
步驟 4 : 為Category增加一個Set集合

package

com.how2java.pojo;

import

java.util.Set;

public

class

Category {

public

int

getId() {

return

id;

}

public

void

setId(int

id) {

this.id = id;

}

public

String getName() {

return

name;

}

public

void

setName(String name) {

this.name = name;

}

int

id;

String name;

Set<Product> products;

public

Set<Product> getProducts() {

return

products;

}

public

void

setProducts(Set<Product> products) {

this.products = products;

}

}

步驟 5 : 為Category.hbm.xml增加one-to-many映射

<set name="products"

lazy="false">

<key column="cid"

not-null="false"

/>

<one-to-many

class="Product"

/>

</set>

<set

用于設定一對多(多對多也是他)關系,也可以用list,設定稍複雜點,這裡使用簡單的set來入門。

name="products"

對應 Category類中的products屬性

lazy="false"

表示不使用延遲加載。關于延遲加載,請參考關系的延遲加載

<key column="cid" not-null="false" />

表示外鍵是cid,可以為空

<one-to-many class="Product" />

表示一對多所對應的類是Product

<?xml

version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping

package="com.how2java.pojo">

<class

name="Category"

table="category_">

<id

name="id"

column="id">

<generator

class="native">

</generator>

</id>

<property

name="name"

/>

<set

name="products"

lazy="false">

<key

column="cid"

not-null="false"

/>

<one-to-many

class="Product"

/>

</set>

</class>

</hibernate-mapping>

步驟 6 : TestHibernate 測試one-to-many關系

首先擷取id=1的category,然後通過getProducts() 直接取出其所對應的所有product

package

com.how2java.test;

import

java.util.Set;

import

org.hibernate.Session;

import

org.hibernate.SessionFactory;

import

org.hibernate.cfg.Configuration;

import

com.how2java.pojo.Category;

import

com.how2java.pojo.Product;

public

class

TestHibernate {

public

static

void

main(String[] args) {

SessionFactory sf =

new

Configuration().configure().buildSessionFactory();

Session s = sf.openSession();

s.beginTransaction();

Category c = (Category) s.get(Category.class,

1);

Set<Product> ps = c.getProducts();

for

(Product p : ps) {

System.out.println(p.getName());

}

s.getTransaction().commit();

s.close();

sf.close();

}

}

更多内容,點選了解: https://how2j.cn/k/hibernate/hibernate-one-to-many/40.html