Hibernate 多表连接

几个实体以及其关系

用户,班级,猫,地址:

用户——班级  N-N 

用户——猫    1-1

猫——地址    1-N

几个实体:省略get,set

 public class User {
     private Integer id;
     private String name;
     private Cat cat;
     private Set<Clazz> clazzs;
 }
 public class Clazz {
     private Integer id;
     private String className;
     private Set<User> users;
 }
 
 public class Cat {
     private Integer id;
     private String name;
     private Set<Address> addrs;
     private User user;
 } 
 
public class Address {
     private Integer id;
     private String name;
     private Cat cat;
}
<hibernate-mapping package="howie.domain">
 <class name="User" table="tb_user">
  <id name="id" column="user_id">
   <generator class="identity"/>
  </id>
  <property name="name" column="user_name"/>
  <many-to-one name="cat" class="Cat" column="cat_id" unique="true"/>
  <set name="clazzs" table="tb_clazz_user_join"  >
   <key column="user_id"/>
   <many-to-many class="Clazz"  column="clazz_id"/>
  </set>
 </class>
 
 <class name="Clazz" table="tb_clazz">
  <id name="id" column="clazz_id">
   <generator class="identity"/>
  </id>
  <property name="className" column="clazz_name"/>
  <set name="users" table="tb_clazz_user_join"  >
   <key column="clazz_id"/>
   <many-to-many class="User" column="user_id"/>
  </set>
 </class>
 <class name="Cat" table="tb_cat">
  <id name="id" column="cat_id">
   <generator class="identity"/>
  </id>
  <property name="name" column="cat_name"/>
  <one-to-one name="user" class="User"  />
  
  <set name="addrs" table="tb_addr" inverse="true" cascade="all" >
   <key column="cat_id"></key>
   <one-to-many class="Address" />
  </set>
  
 </class>
 
 <class name="Address" table="tb_addr">
  <id name="id" column="addr_id">
   <generator class="identity"/>
  </id>
  <property name="name" column="addr_name"/>
  <many-to-one name="cat" class="Cat" column="cat_id" not-null="true"/>
 </class>

</hibernate-mapping>

 测试文件

import java.util.HashSet;
import java.util.Set;
import howie.domain.Address;
import howie.domain.Cat;
import howie.domain.Clazz;
import howie.domain.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class DemoTest {
 public static void main(String[] args) {
  Configuration conf=new Configuration().configure();
  SessionFactory sf=conf.buildSessionFactory();
  Session sess=sf.openSession();
  Transaction tx=sess.beginTransaction();
  
  User user=new User();
  user.setName("howie");
  User user2=new User();
  user2.setName("jimmy");
  
  Cat cat1=new Cat();
  cat1.setName("咖菲猫");
  cat1.setUser(user);
  
  
  
  Address addr1=new Address();
  addr1.setName("树下");
  addr1.setCat(cat1);
  Address addr2=new Address();
  addr2.setName("树上");
  addr2.setCat(cat1);
  
  Address addr3=new Address();
  addr3.setName("屋里");
  addr3.setCat(cat1);
  Address addr4=new Address();
  addr4.setName("屋外");
  addr4.setCat(cat1);
  
  
  Clazz clz1=new Clazz();
  clz1.setClassName("安卓");
  Set<User> users=new HashSet<>();
  users.add(user);
  users.add(user2);
  
  clz1.setUsers(users);
  
  sess.save(user);
  sess.save(user2);
  
  sess.save(clz1);
  sess.save(cat1);
  sess.save(addr1);
  sess.save(addr2);
  sess.save(addr3);
  sess.save(addr4);
  
  tx.commit();
  sess.close();
  sf.close();
  
 }
}

经测试,是OK的,哈哈,自己mark一下

转载于:https://my.oschina.net/u/1035199/blog/286157

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值