下面的两个class是原始的和数据库表的列完全一致的,比如
class Person {
    int personId;
    string personName;
    int teamId;
}
class Team {
    int teamId;
    string teamName;
}映射文件为person.hbm.xml和team.hbm.xml,映射文件中没有实现关联。
<!--person.hbm.xml-->
<class name="Person" table="TBL_PERSON">
        <id name="personId" column="PERSON_ID">
            <generator class="native"/>
        </id>
        <property name="personName" column="PERSON_NAME"/>
        <property name="teamId" column="TEAM_ID"/>
</class>
<!--team.hbm.xml-->
<class name="Team" table="TBL_TEAM">
        <id name="teamId" column="TEAM_ID">
            <generator class="native"/>
        </id>
        <property name="teamName" column="TEAM_NAME"/>
</class>DAO中取person的时候用load(Person.class, personId)。现在想取person的时候,同时根据teamId把team对象也一块取出来(左连接)。但不想修改Person类,于是新建一个类PersonWithTeam如下:
class PersonWithTeam extends Person {
    Team team;
}
这个时候映射文件应该如何修改写啊?取得时候最好load(Person.class, personId)和load(PersonWithTeam.class, personId)都可以用,前者为不带team属性的person对象,后者为带team属性的person对象。

解决方案 »

  1.   

    PersonWithTeam再写个配置文件,然后配置many-to-one用lazy="false"
      

  2.   


    我写了下面这样的,不行。
    <!--PersonWithTeam.hbm.xml-->
    <class name="PersonWithTeam" table="TBL_PERSON">
      <id name="personId" column="PERSON_ID">
      <generator class="native"/>
      </id>
      <property name="personName" column="PERSON_NAME"/>
      <property name="teamId" column="TEAM_ID"/>
      <many-to-one name="team" fetch="join" class="Team" column="TEAM_ID">
    </class>
    会报错,说TEAM_ID重复定义了。如果把<property name="teamId" column="TEAM_ID"/>这行删除,倒是可以了。但是PersonWithTeam的teamId属性会是空。这一点可以在程序里面手动设置,但是很傻的样子,有没有什么好办法?还有就是配置文件中的Person和PersonWithTeam的共同属性能不能共用(即配置文件中不要写两遍,如personName属性),关于这个有没有什么好方法阿?谢谢
      

  3.   

    LZ  可以见两个DAO  PersonDao   TeamDao   
    PersonDao类里面 建两个方法, 一个调用TeamDao ,一个不调用TeamDao 
      

  4.   

    下面的两个class是原始的和数据库表的列完全一致的,比如
    class Person {
      int personId;
      string personName;
      Team team;
    }
    class Team {
      int teamId;
      string teamName;
      List person;
    }映射文件为person.hbm.xml和team.hbm.xml,映射文件中没有实现关联。
    <!--person.hbm.xml-->
    <class name="Person" table="TBL_PERSON">
      <id name="personId" column="PERSON_ID">
      <generator class="native"/>
      </id>
      <property name="personName" column="PERSON_NAME"/>
      <many-to-one name="team" class="*.Team" column="teamId">
    </class>
    <!--team.hbm.xml-->
    <class name="Team" table="TBL_TEAM">
      <id name="teamId" column="TEAM_ID">
      <generator class="native"/>
      </id>
      <property name="teamName" column="TEAM_NAME"/>
      <set name="person" cascade="all" inverse="true">
         <key column="teamId"></key>
         <one-to-many  class="*.person"></one-to-many>
      </set
      

  5.   

    为什么映射文件不关联呢,用Hibernate好处就在这里把。
    我的理解是实体之间关系很复杂,才不关联,自己手写关系