我的MYSQL数据库中有一个表,它没有主键,但在两列上有一个唯一键。当使用MyEclipse的Hibernate反向工程工具为该表创建映射时,它会生成两个类,一个用于在表本身之后命名,另一个用于“Id”后缀。似乎大多数有用的方法最终都出现在Id类中,因此它似乎是您要实例化并保存以保存数据的方法。我可以理解创建Id类是为了表示表/映射对象中的唯一行,但是将它拆分为两个类的用途是什么,然后是使用非Id的用途-suffixed class?
我的同事辩称,你可以只用一个类来完成同样的工作,并且对这些没有主键的表使用逆向工程进行嘲笑。另一方面,我认为MyEclipse开发人员比我更聪明,并且有一个非常好的理由这样做。有吗?
答案 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逆向工程文件,不再进行多个类。