Hibernate 无主键休眠

Hibernate 无主键休眠,hibernate,Hibernate,我正在使用Hibernate制作一个示例应用程序。我的要求是表上没有主键。我只需要从应用程序中选择查询。我知道应该有主键,但我所指的表没有主键 它有大约5万张唱片。因此,修改表以添加ID列看不到可行的选项 有可能吗?没有Hibernate 故事结束了 当您谈论数据库时,50k记录并不是那么多 我的建议是:在表中添加一个自动递增整数PK列。你会惊讶于它有多快 因此,修改表以添加ID列看不到可行的选项 为什么?你是说,因为它已经有五万张唱片了?相信我,这真的不多 即使该表没有代理键,也没有主键约束

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

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

有可能吗?

没有Hibernate

  • 故事结束了
  • 当您谈论数据库时,50k记录并不是那么多
  • 我的建议是:在表中添加一个自动递增整数PK列。你会惊讶于它有多快

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

    为什么?你是说,因为它已经有五万张唱片了?相信我,这真的不多



    即使该表没有代理键,也没有主键约束,即使您不愿意更改该表,它也可能有某种类型的列,即一些从不为null的列集,其值唯一地标识记录。即使不改变表以强制其唯一性和非空性,您也可以告诉Hibernate这些列构成了一个表。

    我找到了不带主键和空值的表的解决方案。它将在oracledb上工作。其他星展可能也存在类似的情况

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

    @身份证 @列(name=“id”) 私有整数id

  • 然后像这样使用createNativeQuery

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

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

    使用DB2和不带主键的表,可以实现以下功能:

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

    @Id
    @Column(name="id")
    private Integer id;
    
    对于选择查询添加:

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

    我没有对实体进行更新测试,但从数据库中选择信息效果很好

    这是一个很好的答案,但为了备份OP,在许多情况下,无法更改表并“使其正确”。例如,customer为我们提供了一个创建的视图,该视图不包含ID、主键,在许多情况下还包含重复的行。非常令人沮丧,但它发生了。旧线程,但我仍然在谷歌上找到它。值得一提的是,在企业环境中工作时,您不能仅仅因为无法使用所选的orm框架查询而向具有巨大吞吐量和数百万行的表中添加额外的列。。。您只需解决这个问题。Awid在这里提到的答案根本不涉及您的数据库表。这是一个Hibernate不检查双重性的例子。所以故事并没有在第1点结束。有办法做到这一点。也请看:也。我认为ans需要编辑!