hibernate一对多例子-已更新(3)nodeelement-nameembed-xmltrue|false/(1)class(必须):被关联类的名
hibernate一对多例子-已更新
(3) node="element-name" embed-xml="true|false" />(1)
class(必须):被关联类的名称。
(2)
not-found (可选 - 默认为exception): 指明若缓存的标示值关联的行缺失,该如何处理: ignore 会把缺失的行作为一个空关联处理。
(3)
entity-name (可选): 被关联的类的实体名,作为class的替代。
例子
<set name="bars"> <key column="foo_id"/> <one-to-many class="org.hibernate.Bar"/></set>
注意:<one-to-many>元素不需要定义任何字段。 也不需要指定表名。
重要提示 :如果一对多关联中的外键字段定义成NOT NULL,你必须把<key>映射声明为not-null="true",或者使用双向关联,并且标明inverse="true"。
详细请看http://www.huihoo.com/framework/hibernate/reference-v3_zh-cn/collections.html
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?setBook.JAVA
package?com.test;
public?class?Book
{
????private?String?bid;
????private?String?bname;
????private?String?bprice;
????public?Book()
????{
????}
???//写上get?set3.写对应的映射文件
Student.hbm.xml
<?xml?version="1.0"?>
<!DOCTYPE?hibernate-mapping
????PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD//EN"
????"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
????<class?name="com.test.Student"?table="student"?>
????????<id?name="sid"?type="string"?unsaved-value="null"?>
????????????<column?name="sid"?sql-type="char(32)"?not-null="true"/>
????????????<generator?class="uuid.hex"/>
????????</id>
????????<property?name="sname">
????????????<column?name="sname"?sql-type="varchar(16)"?not-null="true"/>
????????</property>
????????<property?name="sage">
????????????<column?name="sage"?sql-type="varchar(16)"?not-null="true"/>
????????</property>
????????<set?name="book"?cascade="all"?outer-join="true">
????????????<key?column="sid"/>
????????????<one-to-many?class="com.test.Book"?/>
????????</set>
????</class>
</hibernate-mapping>
Book.hbm.xml
<?xml?version="1.0"?>
<!DOCTYPE?hibernate-mapping
????PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD//EN"
????"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
????<class?name="com.test.Book"?table="book"?>
????????<id?name="bid"?type="string"?unsaved-value="null"?>
????????????<column?name="bid"?sql-type="char(32)"?not-null="true"/>
????????????<generator?class="uuid.hex"/>
????????</id>
????????<property?name="bname">
????????????<column?name="bname"?sql-type="varchar(16)"?not-null="true"/>
????????</property>
????????<property?name="bprice">
????????????<column?name="bprice"?sql-type="varchar(16)"?not-null="true"/>
????????</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.写测试类了..
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<l.size();i++)
????????????{
????????????????s?=?(Student)l.get(i);
????????????????System.out.println("姓名:?"+s.getSname());
????????????????System.out.println("年龄:?"+s.getSage());
????????????????System.out.println("所有的书:");
????????????????Iterator?it?=?s.getBook().iterator();
????????????????while(it.hasNext())
????????????????{
????????????????????book?=?(Book)it.next();
????????????????????System.out.println("书名:?"+book.getBname());
????????????????????System.out.println("价格:?"+book.getBprice());
????????????????}
????????????}
????????}
????????catch(HibernateException?ex){
????????????ex.printStackTrace();
????????}
????????finally{
????????????try{
????????????????session.close();
????????????}
????????????catch(HibernateException?ex2){
????????????}
????????}
????}
????public?static?void?main(String[]?args)
????{
????????TestOneToMany?t?=?new?TestOneToMany();
????????//t.doCreate();
????????t.doQuery();
????}
}
好了。。
在这里把这些例子几下来。。方便查阅。。
也是很适合象我们这样的出学者。。。