hibernate 一个对象对应两张表

本文介绍Hibernate框架中一个对象对应两张表的映射方法,包括如何定义模型类、配置XML文件以及实现增删改查操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. hibernate 一个对象对应两张表
  2. OR映射的设置
  3. 一个对象对应一张表
  4. User    <-----> Person1
  5. 一个对象对应两张表
  6. User    <-----> Person1 , Phone1
  7. Person1 :ID ,Name
  8.     
  9. Phone1 :PersonID PK,PhoneCode PK
  10. 自然主键或物理主键
  11. 在User对象中需要添加一个映射Phone1表的属性(集合属性)
  12. 集合属性有三种:List,Set,Map
  13. List  有元素下标
  14. Map  有键值
  15. Set   没有重复值即可
  16. model.xml
  17. <hibernate-mapping>
  18.     <class name="my.User" table="Person1" schema="dbo" catalog="Demo">
  19.         <id name="uid" type="int">
  20.             <column name="ID" />
  21.             <generator class="assigned"></generator>
  22.         </id>
  23.         <property name="uname" type="string">
  24.             <column name="Name" length="50" not-null="true" />
  25.         </property>
  26.         <set name="phoneSet" table="Phone1" >
  27.             <key column="PersonID" />
  28.             <element column="PhoneCode" type="string" />
  29.         </set>
  30.     </class>
  31. </hibernate-mapping>
  32. User.java
  33. public class User  {
  34.     private int uid;
  35.     private String uname;
  36.     private Set phoneSet=new HashSet();
  37.     
  38.     public User() {}
  39.     public User(int uid, String uname) {
  40.         this.uid = uid;
  41.         this.uname = uname;
  42.     }
  43.     public int getUid() {
  44.         return this.uid;
  45.     }
  46.     public void setUid(int uid) {
  47.         this.uid = uid;
  48.     }
  49.     public String getUname() {
  50.         return this.uname;
  51.     }
  52.     public void setUname(String uname) {
  53.         this.uname = uname;
  54.     }
  55.     
  56.     public Set getPhoneSet() {
  57.         return phoneSet;
  58.     }
  59.     public void setPhoneSet(Set phoneSet) {
  60.         this.phoneSet = phoneSet;
  61.     }
  62. }
  63. UserOp.java
  64. public class UserOp {
  65.     private Session se=null;
  66.     
  67.     public UserOp(){
  68.         //1:读配置文件
  69.         Configuration config=new Configuration().configure();
  70.         //2:建会话工厂
  71.         SessionFactory sf=config.buildSessionFactory();
  72.         //3:获取和数据库的会话(连接)
  73.         se= sf.openSession();
  74.     }
  75.     public void QueryAll(){
  76.         List list=null;
  77.         //1:创建执行查询用的对象(Query)
  78.         Query query=se.createQuery("from User");
  79.         //2:获取返回的结果集(List)
  80.         list= query.list();
  81.         //3:遍历集合
  82.         Iterator iter=list.iterator();
  83.         while(iter.hasNext()){
  84.             User temp=(User)iter.next();
  85.             System.out.println(temp.getUid()+":"+temp.getUname());
  86.         }
  87.     }
  88.     public void AddUser(User u){
  89.         se.save(u);
  90.         se.beginTransaction().commit();
  91.     }
  92.     public void UpdUser(User u){
  93.         se.update(u);
  94.         se.beginTransaction().commit();
  95.     }   
  96.     public void DelUser(User u){
  97.         se.delete(u);
  98.         se.beginTransaction().commit();
  99.     }   
  100. }
  101. Test.java
  102. public class Test {
  103.     public static void main(String[] args) {
  104.         //1:生成操作User对象实例
  105.         UserOp op=new UserOp();
  106.         //2:执行对数据更改
  107.         //2.1
  108.         User u=new User(4,"小虫");
  109.         Set phoneSet=new HashSet();
  110.         phoneSet.add("022-21331111");
  111.         phoneSet.add("13511112222");
  112.         u.setPhoneSet(phoneSet);
  113.         //2.2
  114.         op.AddUser(u);
  115.         //3:查询结果
  116.         op.QueryAll();
  117.     }
  118. }

下面是List集合
<class name="my.User" table="Person1" >
  <id name="uid" column="ID" type="int" >
   <generator class="assigned" />
  </id>
  <property name="uname" column="Name" type="string" length="50" />
  <list name="phones" table="Phone1">
   <key column="PID" />     //联合主键PID,ORD 其中ORD是索引列如果使用

list集合就必须手动添加该列
   <index column="ORD" />
   <element column="Code" type="string" length="50"  />
  </list>
 </class>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值