没有主键休眠
问题描述:
我用Hibernate做了一个示例应用程序。我的要求是桌子上没有主键。我只需要从应用程序中选择查询。我知道应该有一个主键,但我所指的桌子却没有它。没有主键休眠
它有大约50K记录。所以,修改表格以添加ID列没有看到可行的选项。
它有可能吗?
答
- Hibernate requires that entity tables have primary keys.故事结束。
- 当你谈论数据库时,50k记录根本就不是那么多。
我的建议:在表中添加一个自动增量整数PK列。你会对它的速度感到惊讶。
答
因此,修改表中添加ID列没有看到可行的选项。
这是为什么?你的意思是,因为它已经有五万条记录?相信我,那真的不是很多。
即使表不具有代理键,并没有一个主键约束,即使你不愿意修改表,但仍可能有某种candidate key —也就是说,一些永远不为空的列集合,其值唯一标识一条记录。即使不修改表来强制其唯一性和非无效性,您可以告诉Hibernate这些列形成composite ID。
答
我找到了没有主键和空值为表的解决方案。它将在oracle数据库上运行。也许其他数据库存在类似的情况。
-
您应该创建在POJO类新的主键:
@Id @Column(name = “ID”) 私人整数ID;
,并使用createNativeQuery这样
getEntityManager().createNativeQuery("select rownum as id, .....
本机查询将生成主键,你会得到独特的效果。
在没有触及你的数据库表的情况下,在这里提到的答案[Hibernate和没有PK作品](http://stackoverflow.com/questions/767277/hibernate-and-no-pk)。这是Hibernate实际上不检查重复的一个例子。 – Sankalp 2014-02-05 12:45:28