当前位置: 首页 > 面试题库 >

用于数据库视图的JPA / SpringBoot存储库(非表)

路金鑫
2023-03-14
问题内容

我正在尝试为视图创建JPA实体。在数据库层中,表和视图应该相同。

但是,问题开始出现并且有两个方面:

  1. 尝试设置正确的注释时。视图没有与之关联的主键,但是如果没有对@javax.persistence.Id字段进行适当的注释,则会org.hibernate.AnnotationException: No identifier specified for entity在运行时引发抛出异常

  2. Spring Boot JpaRepository接口定义要求ID类型为extends Serializable,这避免java.lang.Void了由于视图实体上缺少ID 而不能用作替代方法。

与缺少主键的视图进行交互的正确JPA / SpringBoot / Hibernate方法是什么?


问题答案:

我也在探索那个话题。我最终将基于 Spring Data JPA
接口的Projections与本机查询一起使用。

我创建了一个接口,确保UPPERCASE部分与DB Column名称匹配:

public interface R11Dto {

   String getTITLE();

   Integer getAMOUNT();

   LocalDate getDATE_CREATED();
}

然后我创建了一个存储库,用于一个与视图没有任何关系的实体(用户)。在该存储库中,我创建了一个简单的本地查询。vReport1_1是我的观点。

public interface RaportRepository extends JpaRepository<User, Long> {

   @Query(nativeQuery = true, value = "SELECT * FROM vReport1_1 ORDER BY DATE_CREATED, AMOUNT")
   List<R11Dto> getR11();

}


 类似资料:
  • 我正在尝试为视图创建一个JPA实体。从数据库层来看,表和视图应该是相同的。 然而,问题开始出现,它们是两方面的: > 当试图设置正确的注释时。视图没有与之相关联的主键,但没有适当的javax。坚持不懈Id注释在字段上,您将获得一个组织。冬眠AnnotationException:没有为运行时抛出的实体指定标识符。 Spring Boot接口定义要求类型扩展,这排除了使用作为视图实体上缺少id的解决

  • 我有一个springboot项目,为了执行请求,我正在连接到我的mysql数据库。我有一个实体ExportBatch: 我在ExportBatchRepository中定义了一个新方法: 在我的控制器里,我是这样做的: 当我调用“/GetLastBatchsProblemes”时会遇到这个异常:java.lang.ClassCastException:[Ljava.lang.Object;不能强制

  • 是否有一种方法可以使通用Spring数据JPA存储库正确处理类似的方法?例如只返回狗,而不返回所有动物?或者至少,最好的变通方法是什么? 它的工作几乎完美,保存每一个动物在自己的桌子上,等等。唯一的问题是:同时返回水豚和狗。这个答案解释说: 这只有在域类使用单表继承时才起作用。我们在引导时能得到的关于domain类的唯一信息是它将是Product对象。因此,对于像findAll()甚至findBy

  • 问题内容: 每次访问数据库记录时,什么是最合适的和最有效的存储视图计数的方法? 我有包含以下字段的表: 每个项目都有自己的永久链接:http : //domain.com/item_name 我希望能够使用此数据并在页面上显示一个。哪种方法最好? 方法一 在表中创建一个附加字段,并对其进行更新以增加视图计数: 方法B 创建一个包含以下字段的新表: 并在每次查看页面时将新记录添加到表中。 方法C 完

  • 它是否将其存储在缓存中?我有一个应用程序,但应用程序中没有任何地方。属性是提到的db详细信息。我可以通过邮递员存储数据和查询它。

  • 但是有没有一种方法可以用我的SQL存储库做同样的事情,并让EntityManger对测试数据库执行nativeQuery呢? 我还没弄明白。