hibernate的one-to-many实例

已有 1606 次阅读 2007-8-30 16:49 |个人分类:Java-Hibernate|系统分类:程序开发

前段时间一直在研究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 
  1. public class Customer {
  2. private String cid;
  3. private String custName;
  4. private Set accounts= new HashSet();
  5. public Customer(){
  6. }
  7. public String getCid() {
  8. return cid;
  9. }
  10. public void setCid(String cid) {
  11. this.cid = cid;
  12. }
  13. public String getCustName() {
  14. return custName;
  15. }
  16. public void setCustName(String custName) {
  17. this.custName = custName;
  18. }
  19. public Set getAccounts(){
  20. return accounts;
  21. }
  22. public void setAccounts(Set accounts){
  23. this.accounts = accounts;
  24. }
  25. }
  26. public class Account {
  27. private long aid;
  28. private String accNumber;
  29. private Customer customer;
  30. public Account(){
  31. }
  32. public long getAid() {
  33. return aid;
  34. }
  35. public void setAid(long aid) {
  36. this.aid = aid;
  37. }
  38. public String getAccNumber() {
  39. return accNumber;
  40. }
  41. public void setAccNumber(String accNumber) {
  42. this.accNumber = accNumber;
  43. }
  44. public Customer getCustomer(){
  45. return customer;
  46. }
  47. public void setCustomer(Customer customer){
  48. this.customer = customer;
  49. }
  50. }
4、xml配置文件中:(关系的建立)  Account.hbm.xml 
  1. \"1.0\"?>
  2.   PUBLIC \"-//Hibernate/Hibernate Mapping DTD//EN\"
  3. \"<a href="http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd//" target="_blank" "="">http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd\">
  4.   <class name=\"one2many.Account\" table=\"Account\">
  5. \"aid\" type=\"long\" column=\"aid\" unsaved-value=\"0\">
  6. <generator class=\"increment\"/>
  7. \"accNumber\" type=\"string\"/>
  8. \"customer\" column=\"cidForCustomer\"/>
  9. class>
Customer.hbm.xml 
  1. \"1.0\"?>
  2.   PUBLIC \"-//Hibernate/Hibernate Mapping DTD//EN\"
  3. \"<a href="http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd//" target="_blank" "="">http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd\">
  4.   <class name=\"one2many.Customer\" table=\"Customer\">
  5. \"cid\" type=\"string\" column=\"cid\">
  6. <generator class=\"assigned\"/>
  7. \"custName\" type=\"string\"/>    
  8. \"accounts\" lazy=\"true\" inverse=\"true\" cascade=\"all\" >
  9. \"cidForCustomer\"/>
  10. <one-to-many class=\"one2many/Account\"/>
  11. class>
5、测试程序,Test.java 
  1. package one2many;
  2. import net.sf.hibernate.*;
  3. import net.sf.hibernate.cfg.*;
  4. public class Test {
  5. public static void main(String[] args) throws HibernateException {
  6. Configuration conf= new Configuration();
  7.   conf.addClass(Account.class);
  8.   conf.addClass(Customer.class);
  9.   SessionFactory sessionFactory = conf.buildSessionFactory();
  10.   Customer cust = new Customer();
  11.   cust.setCid(\"aa\");
  12.   cust.setCustName(\"Kelvin\");
  13.   Account acc = new Account();
  14.   acc.setAccNumber(\"acc\");
  15.   acc.setCustomer(cust);
  16.   Account acc1 = new Account();
  17.   acc1.setAccNumber(\"acc1\");
  18.   acc1.setCustomer(cust);
  19.   cust.getAccounts().add(acc);
  20.   cust.getAccounts().add(acc1);
  21.   Session session = sessionFactory.openSession();
  22.   Transaction tx= session.beginTransaction();
  23.   session.save(acc);
  24.   session.save(cust);
  25.   tx.commit();
  26.   session.close();
  27.   sessionFactory.close();
  28. }
  29. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值