5

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

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

4

5 回答 5

0

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

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

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

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

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

于 2008-11-20T21:53:09.437 回答
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>

但是从表元素中删除模式和目录属性,我没有得到 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>

不知道为什么会这样。

于 2012-01-27T03:08:31.447 回答
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>
于 2009-07-02T15:26:52.743 回答
0

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

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

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

于 2015-04-22T11:37:48.730 回答
0

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

于 2015-11-12T09:51:41.103 回答