Hibernate继承映射(2)

基本的和上次是一样的,变是的配置文件

1.Extend2.hbm.xml配置文件

<hibernate-mapping package="com.sing.hibernate.entity"> <class name="Animal2" table="s_animal2"> <id name="id" column="a_id"> <generator class="sequence"> <param name="sequence">a_animal_seq</param> </generator> </id> <property name="name" column="a_name" /> <property name="sex" column="a_sex" /> <!-- 生成单独生成一张表 --> <joined-subclass name="Pig2" table="s_pig2"> <!-- p_id会生成为主键,并且以外键引用Animal2的a_id --> <key column="p_id" /> <property name="weight" column="p_weight" /> </joined-subclass> <joined-subclass name="Bird2" table="s_bird2"> <!-- p_id会生成为主键,并且以外键引用Animal2的a_id --> <key column="b_id" /> <property name="height" column="b_height" /> </joined-subclass> </class> </hibernate-mapping>

2.测试类

@Test public void save() { Session session = HibernateUtil.getSession(); try { session.beginTransaction(); Pig2 pig = new Pig2(); pig.setName("猪八戒"); pig.setSex('女'); pig.setWeight(100); Bird2 bird = new Bird2(); bird.setName("小鸟"); bird.setSex('男'); bird.setHeight(500); session.save(pig); session.save(bird); session.getTransaction().commit(); } catch (Exception e) { session.getTransaction().rollback(); } finally { HibernateUtil.closeSession(); } } @Test public void load() { Session session = HibernateUtil.getSession(); try { session.beginTransaction(); Pig2 pig2 = (Pig2) session.load(Pig2.class, 1); System.out.println(pig2.getName()); System.out.println(pig2.getWeight()); session.getTransaction().commit(); } catch (Exception e) { session.getTransaction().rollback(); } finally { HibernateUtil.closeSession(); } } @Test public void load2() { Session session = HibernateUtil.getSession(); try { session.beginTransaction(); Animal2 animal2 = (Animal2) session.get(Animal2.class, 1); System.out.println(animal2.getName()); // 因为load方法加载,Animal返回的是一个代理类对象 // load默认是不支持多态查询,可以采用把<class>标签上面的lazy属性设置为false即可 // get直接支持多态查询 if (animal2 instanceof Pig2) { System.out.println("-------animal--pig" + animal2.getClass()); } else { System.out.println("-------animal--bird"); } session.getTransaction().commit(); } catch (Exception e) { session.getTransaction().rollback(); } finally { HibernateUtil.closeSession(); } } @Test public void load3() { Session session = HibernateUtil.getSession(); try { session.beginTransaction(); List<Animal2> animal2s = session.createQuery("from Animal2").list(); for (Animal2 animal : animal2s) { System.out.println("-------animal--pig" + animal.getClass()); } session.getTransaction().commit(); } catch (Exception e) { session.getTransaction().rollback(); } finally { HibernateUtil.closeSession(); } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值