我有两个表 a b 表,他们的字段是一样的,我在hibernate 中定义了一个父类 M ,并在 M.hbm.xml 中定义了a和b表中共有字段信息,并在M中申明了主键id,然后还 用union-subclass 申明了 A 和 B 两个子类,他们的所有属性均从父类继承所得,主键也是,M 中主键的生成方式为 increment ,我能保存数据到A 表和  B 表中,但是有个问题,A 和 B 表中的主键用的是同一个生成器,就是说 当往A 中插入 一条记录是,id为 1,然后再往B 中插入一条记录是,id 就是2 了,而不是从1开始。如何让它们各自增长自己的,如何解决,请高手帮忙,谢谢,方便留个QQ吧,谢谢

解决方案 »

  1.   


    两种方式可以解决:
    1.修改hubernate配置,让两个表ID序列各顾各的
    2.自动增长ID在数据库里做,程序上就不用管它了
      

  2.   

    首先联合子类映射(union-subclass)不能指定子类的生成策略,这是官方规定的,也会报错
    针对这种情况。LZ可以用每个子类一张表,用标示字段去辨识
    就是那个subclass字段嵌套join的方法
      

  3.   

    用joined-subclass标签就可以了<?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
    <class name="com.test.hibernate.Animal" table="t_animal">
    <id name="id">
    <generator class="native"/>
    </id>
    <property name="name"/>
    <property name="sex"/>
    <joined-subclass name="com.test.hibernate.Pig" table="t_pig">
    <key column="id"/>
    <property name="weight"/>
    </joined-subclass>
    <joined-subclass name="com.test.hibernate.Bird" table="t_bird">
    <key column="id"/>
    <property name="height"/>
    </joined-subclass>
    </class>
    </hibernate-mapping>
    其中:public class Animal
         {
           private Integer id;
           private String name;
           private boolean sex;
           
           相应的getter和setter方法...
         }
         public class Pig extends Animal
         {
           private double weight;
           相应的getter和setter方法...     }
        
         public class Bird extends Animal
         {
           private double height;
           相应的getter和setter方法...     }