数据库oracle中的一个表中是联合主键但是hibernate在映射的时候我不希望使用联合主键来进行读取,因为这样要多生成一个类。
所以我就把映射文件aaa.xml里面的联合主键composite-id删除掉,然后使用随便一个联合主键中的字段来设置成主键id<composite-id name="id" class="entities.TSystemrolerightId">
<key-many-to-one name="TSystemrole" class="entities.TSystemrole" >
<column name="ROLE_ID" length="20" />
</key-many-to-one>
<key-many-to-one name="TSystemright" class="entities.TSystemright" >
<column name="RIGHT_ID" length="10" />
</key-many-to-one>
</composite-id>
改成了<id name="ROLE_ID" type="java.lang.String">
<column name="ROLE_ID" length="20" />
<generator class="assigned" />
</id>
<property name="RIGHT_ID" type="java.lang.String">
<column name="RIGHT_ID" length="20" />
</property>结果开始的时候很成功,可以进行插入和删除。但是后来数据一多就出现了一个问题;
因为是联合主键所以ROLE_ID是有重复的,读取出来的数据里面,如果第一条ROLE_ID对应的值为aaa的话,
以下所有的ROLE_ID为aaa的数据都将是跟第一条纪录是一样的。
打个比方:
ROLE_ID RIGHT_ID
aaa bbbb
aaa bbbb2
aaa bbbb3
这样的数据,到最后出来的时候全变成
ROLE_ID RIGHT_ID
aaa bbbb
aaa bbbb
aaa bbbb
这样了。。高手能指教一下吗???因为程序已经做好了。能不能只改hibernate的配置文件就能修改过来呀。。
所以我就把映射文件aaa.xml里面的联合主键composite-id删除掉,然后使用随便一个联合主键中的字段来设置成主键id<composite-id name="id" class="entities.TSystemrolerightId">
<key-many-to-one name="TSystemrole" class="entities.TSystemrole" >
<column name="ROLE_ID" length="20" />
</key-many-to-one>
<key-many-to-one name="TSystemright" class="entities.TSystemright" >
<column name="RIGHT_ID" length="10" />
</key-many-to-one>
</composite-id>
改成了<id name="ROLE_ID" type="java.lang.String">
<column name="ROLE_ID" length="20" />
<generator class="assigned" />
</id>
<property name="RIGHT_ID" type="java.lang.String">
<column name="RIGHT_ID" length="20" />
</property>结果开始的时候很成功,可以进行插入和删除。但是后来数据一多就出现了一个问题;
因为是联合主键所以ROLE_ID是有重复的,读取出来的数据里面,如果第一条ROLE_ID对应的值为aaa的话,
以下所有的ROLE_ID为aaa的数据都将是跟第一条纪录是一样的。
打个比方:
ROLE_ID RIGHT_ID
aaa bbbb
aaa bbbb2
aaa bbbb3
这样的数据,到最后出来的时候全变成
ROLE_ID RIGHT_ID
aaa bbbb
aaa bbbb
aaa bbbb
这样了。。高手能指教一下吗???因为程序已经做好了。能不能只改hibernate的配置文件就能修改过来呀。。
不可能 这样的数据就无法维护了。。而且你这样的机制跟hibernate映射的机制没什么区别呀
程序改动太大了。。
我来打个比方吧..厂商->(厂商地区和名称)联合主键
供应商->(供应商ID+厂商主键(联合主键))联合主键
子供应商->(子供应商ID+供应商主键+厂商主键(联合主键))联合主键以此类推
想想hibernate中的映射..一个子子子供应商中要有多少个对象创建呀??如果我直接修改hibernate中的映射,这样节省了多少的资源呢??想想..
我可以在程序中自行处理它们的引用值问题..
郁闷啊..
数据库那边要联合主键呀..
打个比方...不同省的同名的市...不同市的同名的镇..可以理解吗??
你要是使用过hibernate的映射东西就明白了
<id name="role_right_id">
<generator class="uuid"/>
</id>
<id name="role_right_id">
<generator class="uuid"/>
</id>
<property name="ROLE_ID" type="java.lang.String">
<column name="ROLE_ID" length="20" />
</property>
<property name="RIGHT_ID" type="java.lang.String">
<column name="RIGHT_ID" length="20" />
</property>
也可以配置成
user(1)----(n)user_right(n)-----(1)right
这样的话 hibernate查询出来的数据就会有重复的了..
只要是 role_right_id 一样的它就会自动地归为一条记录了
role_right_id在数据库表中设置为主键,还能重复?
这个非业务主键是什么??
我主要是不想修改数据库的结构和映射的类,就是只想修改一下映射的*.hbm.xml文件能达到这种效果吗??