Java 与Id以外的列的一对多关系(主键)
我正在尝试使用hibernate一对多映射来映射两个表。但是,它总是使用错误的列进行映射。请任何人在这件事上帮助我Java 与Id以外的列的一对多关系(主键),java,hibernate,nhibernate-mapping,Java,Hibernate,Nhibernate Mapping,我正在尝试使用hibernate一对多映射来映射两个表。但是,它总是使用错误的列进行映射。请任何人在这件事上帮助我 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] 上面是我用于映射的两个
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]
上面是我用于映射的两个表。在这里,我想将Level4\u Master的列next\u level\u id映射为Level3\u Master的列prv\u level\u id。但是,hibernate总是将列prv_level_id与Level4_Master的level_id映射为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>
及
我的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
}
class-Level4{
私有int-levelId;
私人国际公司;
私有字符串levelName;
私有int nextLevelId;
私有集levelList=新哈希集(0);
私有时间戳ts;
//吸气剂
}
三级{
私有int-levelId;
私有内部prvLevelId;
私有字符串levelName;
私有int nextLevelId;
私有集levelList=新哈希集(0);
私有时间戳ts;
//吸气剂
}
您需要将属性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>
您需要将
属性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>
谢谢你的提示…我会试试看,让你知道谢谢你的提示…我会试试看,让你知道