为什么MyEclipse的Hibernate逆向工程在映射某些表时会创建多个类?

时间:2008-11-20 20:19:03

标签: mysql hibernate reverse-engineering myeclipse

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

我的同事辩称,你可以只用一个类来完成同样的工作,并且对这些没有主键的表使用逆向工程进行嘲笑。另一方面,我认为MyEclipse开发人员比我更聪明,并且有一个非常好的理由这样做。有吗?

4 个答案:

答案 0 :(得分:0)

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

这是一个无法猜测所有内容的程序化工具。对于简单的东西来说,这是非常好的,但有时,它不会产生你需要的东西。

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

也可以稍微调整一下发生器选项。

在你的情况下,最好像你的同事一样说。创建自己的实体类。

答案 1 :(得分:0)

在您的逆向工程文件中:

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

答案 2 :(得分:0)

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

但是从表元素中删除了schema和catalog属性,我没有得到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>

不知道为什么会这样。

答案 3 :(得分:0)

你必须进入你的db并检查你是否已经将字段设置为主键,然后是hibernate逆向工程文件,不再进行多个类。