English 中文(简体)
为什么MyEclipse的Hibernate反向工程在将某些表映射时会创建多个类?
原标题:
  • 时间:2008-11-20 20:19:03
  •  标签:

我在我的MYSQL数据库中有一张没有主键但有两列唯一键的表。使用MyEclipse的Hibernate反向工程工具创建该表的映射时,它生成两个类,一个命名为表本身,另一个以“Id”为后缀。看起来大多数有用的方法都出现在Id类中,因此似乎应该实例化并保存数据。我可以理解创建Id类以表示表/映射对象中的唯一行,但将其拆分为两个类的用途是什么,非Id后缀类的用途是什么?

我的同事认为只需一个类即可完成相同的工作,并嘲笑使用逆向工程处理这些没有主键的表。另一方面,我认为MyEclipse开发人员比我聪明得多,这样做肯定有极好的原因。是吗?

问题回答

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

这是一个编程工具,它不能猜测一切。对于简单的事情,经过良好注释使用相当不错,但有时它生成的不一定是您需要的。

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

也可以稍微调整发电机选项。

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

在您的反向工程文件中:

   <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>

我在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>

我不知道为什么。

你必须进入你的数据库并检查是否已将字段设置为主键,然后将Hibernate反向工程文件设置,不再创建多个类。

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

至少對我來說,在表中添加主鍵後,它只生成一個表示表的類。如果我刪除主鍵,它則生成兩個類。

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





相关问题
热门标签