2012-04-26 51 views
-1

我想用hibernate(Netbeans)生成java类。 当这些表没有主键时,这似乎是不可能的。定义主键,休眠反向工程,Oracle序列

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

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

所以我的问题是,现在,我可以编辑hibernate.hbm还是hibernate.cfg.xml或任何其他文件告诉Hibernate使用哪个类包含一个主键? f1。

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

谢谢!

+0

一个序列是一个对象,用于生成一个数字序列,然后可以用它来填充主键列,所以不要混淆Oracle中的主键和序列 - 它们是相关的但不等同于 – 2012-04-26 08:32:33

+0

听起来像是“Sierra Madre设计宝藏”的例子 - “钥匙?我们没有钥匙,我们不需要钥匙!我不必向您展示任何钥匙!”。那些不能从历史中学习的人注定要成为这样的人。 – 2012-04-26 11:07:10

+0

真是@BobJarvis。但是,这并没有回答我的问题:) – djnose 2012-04-30 10:44:46

回答

0

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

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

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

您需要表格的模式。如果没有,你卡住了。

+0

对不起,迟到的答案。我已经知道你写了什么,我的问题是,我无法访问数据库(所以我不能更改任何表),我知道使用的序列,而不是主键。这个设计真的很有趣。 我的问题只是,我可以告诉hibernate的生成过程:“使用那列XYZ作为PK?”还是我必须写我自己的类而不是让它们生成? 谢谢! – djnose 2012-04-30 10:41:21

+0

@djnose - 我怀疑你将不得不编写自己的课程。 – 2012-04-30 11:56:21