本篇內(nèi)容主要講解“Hibernate一對(duì)多怎么實(shí)現(xiàn)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Hibernate一對(duì)多怎么實(shí)現(xiàn)”吧!
10年積累的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先做網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有渾江免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
先看由滿江紅翻譯團(tuán)隊(duì)(RedSaga Translate Team)翻譯的一對(duì)多配置說明,然后在看例子
一對(duì)多關(guān)聯(lián)(One-to-many Associations)
一對(duì)多關(guān)聯(lián) 通過外鍵 連接兩個(gè)類對(duì)應(yīng)的表,而沒有中間集合表。 這個(gè)關(guān)系模型失去了一些Java集合的語義:
一個(gè)被包含的實(shí)體的實(shí)例只能被包含在一個(gè)集合的實(shí)例中
一個(gè)被包含的實(shí)體的實(shí)例只能對(duì)應(yīng)于集合索引的一個(gè)值中
一個(gè)從Product到Part的關(guān)聯(lián)需要關(guān)鍵字字段,可能還有一個(gè)索引字段指向Part所對(duì)應(yīng)的表。
(1) class(必須):被關(guān)聯(lián)類的名稱。
(2) not-found (可選 - 默認(rèn)為exception): 指明若緩存的標(biāo)示值關(guān)聯(lián)的行缺失,該如何處理: ignore 會(huì)把缺失的行作為一個(gè)空關(guān)聯(lián)處理。
(3) entity-name (可選): 被關(guān)聯(lián)的類的實(shí)體名,作為class的替代。
例子
set>
注意:
重要提示
如果Hibernate實(shí)例一對(duì)多關(guān)聯(lián)中的外鍵字段定義成NOT NULL,你必須把
1 先建表
create table student (sid varchar ( 32 ) not null primary key , sname varchar ( 16 ), sage varchar ( 16 ), ) create table book (bid varchar ( 32 ) not null primary key , bname varchar ( 16 ), bprice varchar ( 16 ), sid varchar ( 32 ) )
2.寫vo Student.java
package com.test; import java.util.Set; public class Student { private String sid; private String sname; private String sage; private Set book; public Student() { } // 寫上get set
Book.JAVA
package com.test; public class Book { private String bid; private String bname; private String bprice; public Book() { } //寫上get set
3.寫對(duì)應(yīng)的映射文件Student.hbm.xml
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">id> property> property> set> class> hibernate-mapping>
Book.hbm.xml
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">id> property> property> class> hibernate-mapping>
接著把下面的hibernate.properties文件拷到classes目錄下。。這里用的是MySQL
hibernate.query.substitutions true 1, false 0, yes 'Y', no 'N' ## MySQL hibernate.dialect net.sf.hibernate.dialect.MySQLDialect hibernate.connection.driver_class org.gjt.mm.mysql.Driver hibernate.connection.url jdbc:mysql://localhost:3306/wjcms hibernate.connection.username root hibernate.connection.password wujun hibernate.connection.pool_size 1 hibernate.proxool.pool_alias pool1 hibernate.show_sql true hibernate.jdbc.batch_size 0 hibernate.max_fetch_depth 1 hibernate.cache.use_query_cache true
4.寫測(cè)試類了..
package com.test; import net.sf.hibernate.Session; import net.sf.hibernate.SessionFactory; import net.sf.hibernate.cfg.Configuration; import net.sf.hibernate.*; import java.util.Set; import java.util.HashSet; import java.sql.*; import java.util.List; import java.util.Iterator; public class TestOneToMany { SessionFactory sf; Session session; public TestOneToMany() { try { Configuration cfg = new Configuration(); sf = cfg.addClass(Student.class).addClass(Book.class).buildSessionFactory(); } catch(HibernateException ex) { ex.printStackTrace(); } } //插入 public void doCreate() { try { session = sf.openSession(); Student student = new Student(); student.setSname("小王"); student.setSage("22"); Set bookSet = new HashSet(); Book book = null; for(int i=0;i<2;i++) { book = new Book(); book.setBname("java "+i); book.setBprice("50"); bookSet.add(book); } student.setBook(bookSet); session.save(student); session.flush(); session.connection().commit(); } catch(HibernateException ex) { ex.printStackTrace(); } catch(SQLException ex1) { ex1.printStackTrace(); } finally { try{ session.close(); } catch(HibernateException ex2){ } } } //查詢 public void doQuery() { try{ session = sf.openSession(); Query q = session.createQuery("select s from Student as s"); List l = q.list(); Student s = null; Book book = null; for(int i=0;i到此,相信大家對(duì)“Hibernate一對(duì)多怎么實(shí)現(xiàn)”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
當(dāng)前題目:Hibernate一對(duì)多怎么實(shí)現(xiàn)
網(wǎng)站URL:http://weahome.cn/article/pgjspp.html