为啥 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文件很慢啊,有没有好的解决方法