【问题标题】:Why does MyEclipse's Hibernate Reverse-engineering creates multiple classes when mapping certain tables?为什么 MyEclipse 的 Hibernate 逆向工程在映射某些表时会创建多个类?
【发布时间】:2010-09-23 07:58:10
【问题描述】:

我的 MYSQL 数据库中有一个表,它没有主键,但在两列上有一个唯一键。当使用 MyEclipse 的 Hibernate 逆向工程工具为该表创建映射时,它会生成两个类,一个以表本身命名,一个带有“Id”后缀。似乎大多数有用的方法最终都出现在 Id 类中,所以它似乎是您要实例化并保存以持久化数据的方法。我可以理解这样一个事实,即创建 Id 类是为了表示表/映射对象中的唯一行,但是将其分成两个类有什么用,那么非 Id 的用途是什么- 后缀类?

我的同事认为你可以只用一节课来完成同样的工作,并嘲笑对这些没有主键的表使用逆向工程。另一方面,我假设 MyEclipse 开发人员比我聪明得多,并且这样做是有充分理由的。有吗?

【问题讨论】:

    标签: mysql hibernate reverse-engineering myeclipse


    【解决方案1】:

    你太假设我的朋友了。这些工具实际上并不是来自 MyEclipse 团队,而是来自 Hibernate Tools 项目(JBoss,Hibernate 的开发者)。

    这是一个无法猜测所有内容的程序化工具。这对于注释良好的简单内容非常有用,但有时它不会生成您需要的内容。

    通常需要 id 类来表示复合主键(使用多个属性的键)。它使用了组件类 Hibernate 的概念。

    还可以稍微调整生成器选项。

    在你的情况下,最好按照你的同事说的去做。创建您自己的实体类。

    【讨论】:

      【解决方案2】:

      在您的逆向工程文件中:

         <table schema="public" name="yourtable">
                  <primary-key>
                      <!-- generator may not be necessary for mysql -->
                      <generator class="increment"></generator> 
                      <key-column name="column_name_of_primary_key" />
                  </primary-key>
              </table>
      

      【讨论】:

        【解决方案3】:

        我在 Eclipse 中针对 teradata 实例运行该工具时遇到了类似问题。我有几个视图要反转,它们在一个模式中。我得到了用这个生成的 AcxiomDataId 类:

        <table catalog=".*" schema="U01TKE_GRPR_RADMT_VW" name="F_ACXM_MBR" class="AcxiomData">
            <primary-key>
                <generator class="increment"></generator>
                <key-column name="MBR_UNIQ_KEY" property="memberUniqKey" />
            </primary-key>
        </table>
        

        但是从表格元素中删除了架构和目录属性,我没有得到 AcxiomDataId 类:

        <table name="F_ACXM_MBR" class="AcxiomData">
            <primary-key>
                <generator class="increment"></generator>
                <key-column name="MBR_UNIQ_KEY" property="memberUniqKey" />
            </primary-key>
        </table>
        

        不知道为什么会这样。

        【讨论】:

          【解决方案4】:

          你必须进入你的数据库并检查你是否已经设置了一个字段作为主键,然后是休眠逆向工程文件,不要再做多个类了。

          【讨论】:

            【解决方案5】:

            我面临同样的问题。我认为当您在表中没有任何键时,它会生成两个类。否则,如果您在表中有任何键,那么它只会生成一个。

            至少对我来说,在表中添加主键后,它只生成一个代表表的类。如果我删除主键,那么它会生成两个类。

            旧线程,但我认为对某人有用。

            【讨论】:

              猜你喜欢
              • 2011-05-17
              • 1970-01-01
              • 1970-01-01
              • 2011-07-30
              • 2015-09-29
              • 2017-06-23
              • 2014-11-24
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多