【问题标题】:Define Primary Key, Hibernate Reverse Engeneering, Oracle Sequence定义主键、Hibernate 逆向工程、Oracle 序列
【发布时间】:2012-05-06 22:28:12
【问题描述】:

我想使用 hibernate (Netbeans) 生成 java 类。 当表没有主键时,这似乎是不可能的。

我无法访问数据库,我刚刚发现他们使用序列而不是主键。

create sequence SEQ_ANY
minvalue 0
maxvalue 99999999999999999999
start with 0
increment by 1000
cache 20;

所以我现在的问题是,我可以编辑 hibernate.hbm 或 hibernate.cfg.xml 或任何其他文件来告诉 hibernate 哪个类包含主键吗? f.e.

<table name="myTable">
<useThisFieldAsPrimaryKey name="uniqueSequenz"/>
</table>

谢谢!

【问题讨论】:

  • 序列是一个用于生成数字序列的对象,然后可以使用它来填充主键列,所以不要混淆Oracle中的主键和序列——它们是相关的但不相关等价物
  • 听起来像是“马德雷山脉设计的宝藏”的一个例子——“钥匙?我们没有钥匙。我们不需要钥匙!我不需要给你看任何 steekeeng钥匙!!”。 不能从历史中吸取教训的人注定要成为历史。
  • 如此真实@BobJarvis。但这并不能回答我的问题:)

标签: oracle hibernate netbeans reverse-engineering


【解决方案1】:

序列是一种对象,可为您提供主要可能的唯一值。因此,您的表可能有一个由单列组成的主键。

然后每个表都有一个主键(在最坏的情况下,所有列一起形成主键 - 这通常是一个糟糕的数据库设计)。一个主键可以有多个列。

Hibernate 喜欢由单列组成的主键。不过,您可以在 Hibernate 中定义由多个列组成的复合键。

您需要表的架构。如果没有,你会被卡住。

【讨论】:

  • 很抱歉回答迟了。我已经知道你写了什么,我的问题是,我无法访问数据库(所以我无法更改任何表)并且我知道使用的序列而不是主键。那个设计真的很糟糕。我的问题只是,我可以告诉休眠的生成过程:“使用那列XYZ作为PK吗?”还是我必须编写自己的类而不是让它们生成?谢谢!
  • @djnose - 我怀疑你将不得不编写自己的类。
猜你喜欢
  • 2011-07-18
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 2014-06-15
  • 2016-06-18
  • 1970-01-01
  • 2010-09-10
  • 2015-09-27
相关资源
最近更新 更多