浏览 5127 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-23
最后修改:2009-12-23
客户给了我 3张表; 这三张表 分别是从其他数据库中查出来的数据: 这三张表都没有 id 这个字段: 分别为 A B C 三张表: 在进行hibernate 查询时 ,可以查询 ,但是 更新数据时,就会出现 找不到 id唯一标识 的 错误: 这样 我就为每一个表 在hibernate 映射文件中 添加了联合主键:(来欺骗hibernate 主键); 这样的 单表可以查了! 但是 这三个 表关联到一起 就不行: 这是我的配置文件: 我配置了 所有的属性 都作为 联合主键 (大虾 们可以修改 ) (联合主键 也可以是 其中的几个字段)eg: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- This mapping of imain base component --> <hibernate-mapping> A : 表字段: <class name="com.iman.nrms.nrmwns.wrm.domain.model.CardType" table="VAL_CARD_TYPES"> <composite-id> <key-property name="name" type="java.lang.String"> <column name="TYPE_NAME" length="50" not-null="true" /> </key-property> <key-property name="realOrder" type="java.lang.Integer"> <column name="REL_ORDER" length="6"/> </key-property> <key-property name="subCard" type="java.lang.String"> <column name="VAL_FOR_SUB_CARD" length="100" /> </key-property> </composite-id> </class> B: 表字段: <class name="com.iman.nrms.nrmwns.wrm.domain.model.NeToCard" table="EQ_CARD_TYPE_MAP"> <composite-id> <key-many-to-one name="cardName" column="CARD_TYPE" class="com.iman.nrms.nrmwns.wrm.domain.model.CardType"> </key-many-to-one> <key-many-to-one name="equipName" column="EQUIP_TYPE" class="com.iman.nrms.nrmwns.wrm.domain.model.NeType"> </key-many-to-one> <key-property name="realOrder" type="java.lang.Integer"> <column name="REL_ORDER" length="6"/> </key-property> </composite-id> </class> C: 表字段: <class name="com.iman.nrms.nrmwns.wrm.domain.model.NeType" table="EQUIP_TYPES"> <composite-id> <key-property name="name" type="java.long.String"> <column name="TYPE_NAME" length="30" not-null="true"/> </key-property> <key-property name="iconName" type="java.long.String"> <column name="ICON_NAME" length="30"/> </key-property> <key-property name="realOrder" type="java.lang.Integer"> <column name="REL_ORDER" length="3"/> </key-property> <key-property name="suggBeg" type="java.lang.Integer"> <column name="SUGG_BEG4" length="3"/> </key-property> <key-property name="suggEnd" type="java.lang.Integer"> <column name="SUGG_END4" length="3"/> </key-property> <key-property name="swapCols" type="java.long.String"> <column name="SWAP_CARD_RESERVED_COLS" length="2000"/> </key-property> </composite-id> </class> </hibernate-mapping> 注意: B 表算是一个中间表: 通过 A , C 表的联合主键 在B 表建立联系, 更新A C 表中的数据; 单表的查询 和 更新都是没有问题的,可是 多表连接后就不行! 再次强调: A ,B C 三个表中 是没有 Id 只有 联合主键(这里的配置文件也可以修改,可以 ) 注意 B 表中 多对一 关联关系 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-12-24
大侠们 ,有没有什么方式可以解决 啊!
|
|
返回顶楼 | |
发表时间:2009-12-28
真的没有解决的办法吗?
我已经把项目 改了 , 不用一对多了 ,简单的一对一 ,项目逼人啊! 谁有 好的方法 写着啊,我把项目优化一下! |
|
返回顶楼 | |
发表时间:2010-01-08
有 hibernate 高手吗?给个提示吧? 到底hibernate中有没有这样 用的,是不是这样就是 错的@!我在 hibernate 中见到 ,说mang-to-one 或 mang-to-mang中 说必须有id,是不是我这里的id 与 hibernate 内定义的id有冲突!刚刚 入门 程序研究 甚浅,希望老手 给个建议?让我把这个问题解决了吧!就算没有这种用法 ,说一声也可以,
敬 谢! |
|
返回顶楼 | |
发表时间:2010-01-28
十二郎的解决方案:hibernate支持视图,就是说你可以将你的几张表通过数据库建立3个视图,其中视图中可以有ID字段了。然后在项目中同对待表一样的进行查询。
|
|
返回顶楼 | |
发表时间:2010-01-31
san586 写道 十二郎的解决方案:hibernate支持视图,就是说你可以将你的几张表通过数据库建立3个视图,其中视图中可以有ID字段了。然后在项目中同对待表一样的进行查询。 算是个方法!还有 简单的嘛? |
|
返回顶楼 | |