一個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分類下的所有商品

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