您的位置:首页 > 其它

一个完整的hibernate的one-to-many的例子

2007-07-26 09:51 471 查看
前段时间一直在研究hibernate的one-to-many,看了不少资料也在本论坛上求教过,但由于本人对Hibernate研究的时间不是很长,所以花了不少时间和精力.昨天终于弄出来了,现在与大家分享,希望对初学者有帮助!

1、设置数据库,本人使用的数据库是Oracle 9i
设置hibernate.properties
## Oracle

hibernate.dialect net.sf.hibernate.dialect.Oracle9Dialect
#hibernate.dialect net.sf.hibernate.dialect.OracleDialect
hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver
hibernate.connection.username sa
hibernate.connection.password sa
hibernate.connection.url jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:myoracle

2、假设一个用户可以同时有几个帐户,能通过帐户对应到用户,即为一个双向的one-to-many.这是引用我在论坛上发表的文章的回复,很谢谢geniouc给我的参考。

3、javaBean: customer & account


public class Customer {

private String cid;

private String custName;

private Set accounts= new HashSet();



public Customer(){

}

public String getCid() {

return cid;

}

public void setCid(String cid) {

this.cid = cid;

}

public String getCustName() {

return custName;

}

public void setCustName(String custName) {

this.custName = custName;

}



public Set getAccounts(){

return accounts;

}



public void setAccounts(Set accounts){

this.accounts = accounts;

}



}



public class Account {

private long aid;

private String accNumber;

private Customer customer;



public Account(){

}

public long getAid() {

return aid;

}

public void setAid(long aid) {

this.aid = aid;

}

public String getAccNumber() {

return accNumber;

}

public void setAccNumber(String accNumber) {

this.accNumber = accNumber;

}



public Customer getCustomer(){

return customer;

}



public void setCustomer(Customer customer){

this.customer = customer;

}

}

4、xml配置文件中:(关系的建立)
Account.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="one2many.Account" table="Account">

<id name="aid" type="long" column="aid" unsaved-value="0">

<generator class="increment"/>

</id>

<property name="accNumber" type="string"/>

<many-to-one name="customer" column="cidForCustomer"/>

</class>

</hibernate-mapping>

Customer.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="one2many.Customer" table="Customer">

<id name="cid" type="string" column="cid">

<generator class="assigned"/>

</id>

<property name="custName" type="string"/>



<set name="accounts" lazy="true" inverse="true" cascade="all" >

<key column="cidForCustomer"/>

<one-to-many class="one2many/Account"/>

</set>



</class>

</hibernate-mapping>

5、测试程序,Test.java

package one2many;



import net.sf.hibernate.*;

import net.sf.hibernate.cfg.*;



public class Test {

public static void main(String[] args) throws HibernateException {



Configuration conf= new Configuration();

conf.addClass(Account.class);

conf.addClass(Customer.class);

SessionFactory sessionFactory = conf.buildSessionFactory();



Customer cust = new Customer();

cust.setCid("aa");

cust.setCustName("Kelvin");



Account acc = new Account();

acc.setAccNumber("acc");

acc.setCustomer(cust);



Account acc1 = new Account();

acc1.setAccNumber("acc1");

acc1.setCustomer(cust);



cust.getAccounts().add(acc);

cust.getAccounts().add(acc1);



Session session = sessionFactory.openSession();

Transaction tx= session.beginTransaction();

session.save(cust);



tx.commit();

session.close();



sessionFactory.close();

}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: