`
younglibin
  • 浏览: 1214410 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate 无主键 多表连接 更新数据

阅读更多
今天遇到一个问题:

客户给了我 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 表中 多对一 关联关系
分享到:
评论
5 楼 younglibin 2010-01-31  
san586 写道
十二郎的解决方案:hibernate支持视图,就是说你可以将你的几张表通过数据库建立3个视图,其中视图中可以有ID字段了。然后在项目中同对待表一样的进行查询。

算是个方法!还有 简单的嘛?
4 楼 san586 2010-01-28  
十二郎的解决方案:hibernate支持视图,就是说你可以将你的几张表通过数据库建立3个视图,其中视图中可以有ID字段了。然后在项目中同对待表一样的进行查询。
3 楼 younglibin 2010-01-08  
有 hibernate  高手吗?给个提示吧?  到底hibernate中有没有这样 用的,是不是这样就是 错的@!我在 hibernate 中见到 ,说mang-to-one 或 mang-to-mang中 说必须有id,是不是我这里的id 与 hibernate 内定义的id有冲突!刚刚 入门 程序研究 甚浅,希望老手 给个建议?让我把这个问题解决了吧!就算没有这种用法 ,说一声也可以,

敬  谢!
2 楼 younglibin 2009-12-28  
真的没有解决的办法吗?
我已经把项目 改了 , 不用一对多了  ,简单的一对一 ,项目逼人啊!

谁有 好的方法 写着啊,我把项目优化一下!
1 楼 younglibin 2009-12-24  
大侠们 ,有没有什么方式可以解决  啊!

相关推荐

    hibernate复合主键映射

    在Java的持久化框架Hibernate中,复合主键(Composite Key)是一种特殊的数据模型,它用于表示由多个属性共同构成的唯一标识。这种设计通常出现在实体类的某些属性组合起来才能唯一确定一个对象的情况下。本篇文章将...

    Hibernate Annotation 共享主键一对一双向关联

    这意味着这两个实体的表在数据库中通过主键进行连接,一个实体的主键同时也作为另一个实体的外键。 在Hibernate中,我们可以使用`@OneToOne`和`@PrimaryKeyJoinColumn`注解来实现这种关联。`@OneToOne`用于声明一对...

    Hibernate的主键生成方式

    主键是表中的一列或一组列,其值是唯一的,用于唯一地标识表中的每一行数据。在Hibernate框架中,提供了多种主键生成策略,每种策略都有其适用场景。本文将详细介绍这些生成策略,并给出相应的应用场景分析。 #### ...

    Hibernate ORM - 多对多双向连接表关联关系

    本文将深入探讨Hibernate ORM中的一个关键概念——多对多双向连接表关联关系。这种关联关系在实际业务场景中非常常见,比如用户与角色、课程与学生等例子,都需要用到多对多的关系来描述它们之间的复杂联系。 首先...

    利用hibernate中的SchemaExport生成数据表

    创建`hibernate.cfg.xml`配置文件,其中包含了数据库连接信息、方言设置(这里使用的是MySQLDialect)以及映射文件的位置。确保正确设置了`mapping resource`属性,指向我们的`User.hbm.xml`文件。 4. **生成数据...

    hibernate 多表关联 中间表

    通过以上步骤,我们就能在Hibernate中有效地管理多对多关联,并利用中间表实现复杂的数据操作。理解并熟练掌握这些知识,对于任何Java开发人员来说都是非常有价值的,特别是在大型企业级应用中,这种关联映射的使用...

    hibernate以及连接池

    总结来说,Hibernate简化了Java与数据库的交互,而连接池则优化了数据库连接的管理,二级缓存进一步提升了数据访问的效率。理解和熟练掌握这些技术,能够帮助开发者构建更高效、稳定的Java应用程序。

    hibernate多对多

    在数据库设计中,多对多关系通常表现为两个表之间的连接表,这个连接表包含了这两个表的主键,作为外键。例如,学生和课程的关系,一个学生可以选修多个课程,而一个课程也可以被多个学生选修,这就是典型的多对多...

    hibernate连接数据[Mysql]的代码实例

    **hibernate连接数据[Mysql]的代码实例** 在Java应用程序中,Hibernate是一个非常流行的ORM(Object-Relational Mapping)框架,它提供了强大的数据库操作能力,简化了Java与关系型数据库如MySQL之间的交互。本实例将...

    Hibernate初之单表映射学习例子

    6. **CRUD操作**:展示如何使用Hibernate进行创建(Create)、读取(Retrieve)、更新(Update)和删除/Delete)数据的示例代码,包括`save()`, `load()`, `update()`, `delete()`等方法的使用。 7. **HQL与Criteria查询**...

    Hibernate主键类型说明和配置手册.doc

    以下是对Hibernate主键类型及其配置的详细说明: 1. **uuid.hex**: 这种生成器使用128位算法生成一个32位的字符串。由于其通用性,它适用于所有类型的数据库。在`.hbm.xml`映射文件中,你可以这样配置: ```xml ...

    Hibernate自动生成表demo

    其中,`hibernate.hbm2ddl.auto`属性是关键,它可以设置为`create`、`update`或`validate`,分别表示在启动时创建新表、更新现有表或验证表结构是否匹配。在本例中,我们使用`create-drop`,意味着每次应用启动时会...

    用hibernate连接mycat的例子

    本示例"用hibernate连接mycat",旨在展示如何在Java项目中结合这两个技术,利用Hibernate的ORM能力处理Mycat分片后的数据。以下将详细介绍这个过程,以及相关的配置和注意事项。 首先,我们需要在项目中集成Mycat。...

    hibernate多对多查询

    在数据库设计中,这种关系通过中间表(也称为关联表或连接表)来实现,它包含两个外键,分别引用原始表的主键。 在Hibernate中,处理多对多关系需要定义两个实体类,每个实体类对应一个表,并在其中一个或两个实体...

    Hibernate 数据持久化

    - **.hbm.xml文件**: Hibernate映射文件,描述了实体类与数据库表之间的映射关系,包括字段对应、主键生成策略、关联关系等。 4. **持久化操作** - **Session**: Hibernate的主要工作接口,负责执行CRUD操作...

    java利用hibernate连接数据库

    通过Hibernate,我们可以将Java对象与数据库表进行映射,使得数据操作更加便捷和高效。 二、Hibernate环境搭建 1. 添加依赖:在Java项目中,你需要引入Hibernate的JAR包或通过Maven/Gradle等构建工具添加相关依赖。...

    hibernate中创建表

    在生产环境中,通常使用`update`策略仅更新表结构。 6. **运行应用**:启动应用,Hibernate会根据实体类和配置自动创建相应的数据库表。 在提供的链接`https://purplesunset.iteye.com/blog/500979`中,可能详细...

    hibernate入门数据简单插入

    3. **实体类与数据表映射**:在Hibernate中,我们定义一个Java类来表示数据库中的表,使用注解或XML映射文件将类与表关联。例如,`@Entity`注解标识一个类为实体,`@Table`注解指定对应数据库表名,`@Id`注解标记...

    Hibernate 参数设置一览表.doc

    9. **hibernate.order_updates**:当设置为`true`时,Hibernate会按主键顺序执行更新操作,以减少死锁的可能性。 10. **hibernate.generate_statistics**:如果开启,Hibernate会收集统计信息以帮助优化性能。这些...

    JAVA数据类型与Hibernate的类型映射

    在实际应用中,Hibernate还提供了一些高级映射机制,如一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)的关系映射。这些映射通过@OneToOne、@OneToMany、@ManyToOne和@...

Global site tag (gtag.js) - Google Analytics