我使用Hibernate制作示例应用程序。我的要求是桌面上没有主键。我只需要从应用程序中选择查询。我知道应该有一个主键,但我所指的表是没有它的。
它有大约5万条记录。因此,修改表以添加ID列看不到可行的选项。
可以吗?
答案 0 :(得分:33)
我的建议:在表格中添加一个自动增量整数PK列。你会对它的速度感到惊讶。
答案 1 :(得分:9)
因此,修改表以添加ID列看不到可行的选项。
为什么?你的意思是,因为它已经有五万条记录了吗?相信我,这真的不是很多。
即使表没有代理键,也没有主键约束,即使你不愿意改变表,它仍然可能有某种{{3} - 即一些永远不为null的列,其值唯一地标识一条记录。即使不改变表来强制它们的唯一性和非null性,你也可以告诉Hibernate这些列形成candidate key。
答案 2 :(得分:3)
不使用Hibernate。 It requires a primary key.
答案 3 :(得分:2)
我找到了没有主键和null作为值的表的解决方案。它适用于oracle DB。也许其他数据库存在类似的东西。
您应该在POJO类中创建新的主键:
@Id @Column(名称= “ID”) private Integer id;
并像这样使用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, ..."
我还没有测试实体的更新,但是从数据库中选择信息很好