没有主键的休眠

时间:2011-12-21 14:18:22

标签: hibernate

我使用Hibernate制作示例应用程序。我的要求是桌面上没有主键。我只需要从应用程序中选择查询。我知道应该有一个主键,但我所指的表是没有它的。

它有大约5万条记录。因此,修改表以添加ID列看不到可行的选项。

可以吗?

5 个答案:

答案 0 :(得分:33)

  1. Hibernate requires that entity tables have primary keys.故事结束。
  2. 当您谈论数据库时,50k记录并不是那么多。
  3. 我的建议:在表格中添加一个自动增量整数PK列。你会对它的速度感到惊讶。

答案 1 :(得分:9)

  

因此,修改表以添加ID列看不到可行的选项。

为什么?你的意思是,因为它已经有五万条记录了吗?相信我,这真的不是很多。


即使表没有代理键,也没有主键约束,即使你不愿意改变表,它仍然可能有某种{{3} - 即一些永远不为null的列,其值唯一地标识一条记录。即使不改变表来强制它们的唯一性和非null性,你也可以告诉Hibernate这些列形成candidate key

答案 2 :(得分:3)

不使用Hibernate。 It requires a primary key.

答案 3 :(得分:2)

我找到了没有主键和null作为值的表的解决方案。它适用于oracle DB。也许其他数据库存在类似的东西。

  1. 您应该在POJO类中创建新的主键:

    @Id @Column(名称= “ID”) private Integer id;

  2. 并像这样使用createNativeQuery

    getEntityManager().createNativeQuery("select rownum as id, .....
    

    本机查询将生成主键,您将获得独特的结果。

答案 4 :(得分:0)

使用带有没有主键的表的DB2可以完成以下工作:

在Entity中定义主键字段,类似于:

@Id
@Column(name="id")
private Integer id;

对于“选择查询”,添加:

String selectQuery = "select ROW_NUMBER() OVER () id, ..."

我还没有测试实体的更新,但是从数据库中选择信息很好