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

Posted

技术标签:

【中文标题】为啥 MyEclipse 的 Hibernate 逆向工程在映射某些表时会创建多个类?【英文标题】: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 开发人员比我聪明得多,并且这样做是有充分理由的。有吗?

【问题讨论】:

【参考方案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】:

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

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

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

【讨论】:

以上是关于为啥 MyEclipse 的 Hibernate 逆向工程在映射某些表时会创建多个类?的主要内容,如果未能解决你的问题,请参考以下文章

myeclipse for Spring为啥打开xml文件很慢啊,有没有好的解决方法

MyEclipse 8.6 保存name.hml.xml文件为啥这么慢

myeclipse中hibernate生成映射文件

MyEclipse的hibernate反转引擎

Myeclipse如何自动创建hibernate 转载

java使用Myeclipse创建Hibernate项目碰到的诸多问题总结