使用 JPA 时如何在没有主键的情况下映射数据库视图
How to map a database view without a primary key when using JPA
- 我在 SQL 没有明显主键(复合或其他)的数据库中有视图
- 我想通过 JPA 访问它们
我读到我应该能够像对待表格一样对待 JPA 中的视图(使用 @Table 注释等)。但是,如果没有主键,我必须有效地从每一列中创建一个复合键(实际上,这在 Hibernate 的逆向工程工具默认情况下似乎是这样做的)。
但是,如果我这样做,会有不良的副作用。
例如
必须编写指向主键属性而不是视图的所有代码:
myViewObject.getPrimaryKey().getFirstName()
无法在 spring 存储库上使用 "findBy..." 方法(因为该属性是视图 "identifier" 的一部分,实际上不是其中之一属性).
我的问题是:如何映射视图以便我可以使用 JPA 轻松访问它们的属性?
注意:我很高兴得知我使用的方法完全错误。这似乎是一个常见的问题,肯定会有更好的解决方案。
您可以向视图的每一行添加一个 UUID
列,这样您就可以将 UUID 列用作 @Id
。
- 我在 SQL 没有明显主键(复合或其他)的数据库中有视图
- 我想通过 JPA 访问它们
我读到我应该能够像对待表格一样对待 JPA 中的视图(使用 @Table 注释等)。但是,如果没有主键,我必须有效地从每一列中创建一个复合键(实际上,这在 Hibernate 的逆向工程工具默认情况下似乎是这样做的)。
但是,如果我这样做,会有不良的副作用。 例如
必须编写指向主键属性而不是视图的所有代码:
myViewObject.getPrimaryKey().getFirstName()
无法在 spring 存储库上使用 "findBy..." 方法(因为该属性是视图 "identifier" 的一部分,实际上不是其中之一属性).
我的问题是:如何映射视图以便我可以使用 JPA 轻松访问它们的属性?
注意:我很高兴得知我使用的方法完全错误。这似乎是一个常见的问题,肯定会有更好的解决方案。
您可以向视图的每一行添加一个 UUID
列,这样您就可以将 UUID 列用作 @Id
。