2013-11-18 1 views
1

Я пытаюсь сопоставить две таблицы, используя сопоставление «один-ко-многим» спящего режима. Но всегда это сопоставление с неправильным столбцом. Пожалуйста, помогите мне в этом.отношение одного к большому отношению к столбцу, отличному от Id (первичный ключ)

Level4_Master [level_id (PK/Auto Increament), company_id, level_name, next_level_id, ts] 
Level3_Master [level_id (PK/Auto Increament), prv_level_id, level_name, next_level_id, ts] 

Выше представлены две таблицы, которые я использую для отображения. Здесь я хотел отобразить столбец next_level_id из Level4_Master с колонкой prv_level_id из Level3_Master. Но спящий режим всегда отображает столбец prv_level_id с level_id of Level4_Master как FK. Мои картографические файлы:

<hibernate-mapping> 
<class name="com.pojo.Level4" table="Level4_Master"> 
    <id name="levelId" type="java.lang.Integer"> 
     <column name="level_id" /> 
     <generator class="increment" /> 
    </id> 
    <property name="companyId" > 
     <column name="company_id" length="10" not-null="true" unique="true" /> 
    </property> 
    <property name="levelName"> 
     <column name="level_name" length="20" not-null="true" unique="true" /> 
    </property> 
    <property name="nextLevelId" type="java.lang.Integer"> 
     <column name="next_level_id" /> 
    </property> 
    <set name="levelList" table="Level3_Master" inverse="true" lazy="true" fetch="select"> 
     <key> 
      <column name="prv_level_id" not-null="true" /> 
     </key> 
     <one-to-many class="com.pojo.Level3" /> 
    </set> 
</class> 
</hibernate-mapping> 

и

<hibernate-mapping> 
<class name="com.pojo.Level3" table="Level3_Master"> 
<id name="levelId" type="java.lang.Integer"> 
    <column name="level_id" /> 
    <generator class="increment" /> 
</id> 
<property name="prvLevelId" > 
    <column name="prv_level_id" length="10" not-null="true" unique="true" /> 
</property> 
<property name="levelName"> 
    <column name="level_name" length="20" not-null="true" unique="true" /> 
</property> 
<property name="nextLevelId" type="java.lang.Integer"> 
    <column name="next_level_id" /> 
</property> 
<set name="levelList" table="Level2_Master" inverse="true" lazy="true" fetch="select"> 
    <key> 
     <column name="prv_level_id" not-null="true" /> 
    </key> 
    <one-to-many class="com.pojo.Level2" /> 
</set> 
</class> 
</hibernate-mapping> 

и мои классы POJO, как

class Level4{ 
    private int levelId; 
    private int companyId; 
    private String levelName; 
    private int nextLevelId; 
    private Set<Level3> levelList = new HashSet<Level3>(0); 
    private Timestamp ts; 
    //getter n setter 
} 

class Level3{ 
    private int levelId; 
    private int prvLevelId; 
    private String levelName; 
    private int nextLevelId; 
    private Set<Level2> levelList = new HashSet<Level2>(0); 
    private Timestamp ts; 
    //getter n setter 
} 

ответ

1

Вы должны использовать property-ref атрибут с именем свойства. Свойство должно добавить unique="true" в отображение свойств.

Пример -

<hibernate-mapping><class name="com.pojo.Level4" table="Level4_Master"> 
<id name="levelId" type="java.lang.Integer"> 
    <column name="level_id" /> 
    <generator class="increment" /> 
</id> 
<property name="companyId" > 
    <column name="company_id" length="10" not-null="true" unique="true" /> 
</property> 
<property name="levelName"> 
    <column name="level_name" length="20" not-null="true" unique="true" /> 
</property> 
<property name="nextLevelId" type="java.lang.Integer" unique="true"> 
    <column name="next_level_id" /> 
</property> 
<set name="levelList" table="Level3_Master" inverse="true" lazy="true" fetch="select"> 
    <key> 
     <column name="prv_level_id" not-null="true" property-ref="nextLevelId"/> 
    </key> 
    <one-to-many class="com.pojo.Level3" /> 
</set> 

+0

Спасибо за подсказки ... Я попытаюсь это и пусть знают – Manu