使用JPA时如何在没有主键的情况下映射数据库视图

And*_*y N 9 java spring hibernate jpa sql-view

  • 我在SQL数据库中有视图,没有明显的主键(复合或其他)
  • 我想通过JPA访问它们

我已经读过,我应该能够像处理表格一样处理JPA中的视图(使用@Table注释等).但是,如果没有主键,我必须从每个列中有效地创建一个复合键(实际上,这是Hibernate的逆向工程工具默认情况下所做的).

但是如果我这样做会产生不良副作用.例如

  • 必须编写所有代码指向主键的属性而不是视图:

    myViewObject.getPrimaryKey().的getFirstName()

  • 无法在spring Repository上使用"findBy ..."方法(因为该属性是视图的"标识符"的一部分,而实际上并不是它的一个属性).

我的问题是:如何在这样的地图中映射视图,因为我可以使用JPA轻松访问其属性?

注意:我很高兴被告知我使用完全错误的方法.这似乎是一个普遍存在的问题,必然会有更好的解决方案.

Vla*_*cea 11

您可以将UUID列添加到视图的每一行,这样就可以将UUID列用作@Id.

  • 安迪,我认为解决方案的实施是错误的.每个查询的UUID都不同.基本上它是一个有效的id,但我不希望能够通过给定的UUID多次选择实体A,即.您将无法从实体列表导航到单个实体.因此,该UUID应该是其中一个基表的一部分,并实际存储为一个列,而不是在视图中计算.另一种方法是使用物化视图. (3认同)
  • @MohammadEghlima:不,您会收到“org.hibernate.AnnotationException:没有为实体指定标识符:<entity>”错误。 (2认同)