【问题标题】:Spring Data JPA without entity class没有实体类的 Spring Data JPA
【发布时间】:2021-10-16 19:22:09
【问题描述】:

我们正在使用 Spring Data JPA + Hibernate 方法来实现。

对于带有连接的复杂查询,我们创建了一个通用映射 xml,我们在其中定义这些查询。

我们不会为这些复杂的查询创建每个实体类。

我们如何使用 JPARepository 并执行这些查询?
有什么办法吗?以下是用 orm.xml 编写的查询之一:

SELECT FMT_NAME( pers.id ) AS customer_name, first_name, mid_name, 
                    last_name, 
                    addr.line_1_addr, 
                    addr.line_2_addr, 
                    RTRIM( LTRIM( addr.city_name || ', ' || addr.state_code || ' ' || 
                    addr.zip_code_num, ', ') || '-' || addr.zip_code_suffix, '-' ) AS line_3_addr 
               FROM pers, (SELECT pers_addr.pers_id , 
                            addr.line_1_addr, addr.line_2_addr, 
                            addr.city_name, addr.state_code, 
                            addr.zip_code_num, addr.zip_code_suffix 
                       FROM pers_addr, addr WHERE addr.id = pers_addr.addr_id 
                        AND TRUNC(SYSDATE) BETWEEN pers_addr.beg_date AND pers_addr.end_date 
                        AND pers_addr.type_code = 'ML' 
                    ) addr WHERE pers.id = ?  AND pers.id = addr.PERS_ID

【问题讨论】:

  • 你有对应Repository的Entity吗?
  • 不,我们不必创建这么多实体类,所以尝试遵循xml的方法。
  • 据我所知,你不能在没有实体的情况下使用 JpaRepository,所以你可以试试这个:stackoverflow.com/questions/60871898/… 或者你可以使用 @Repository 注释创建一个类,但要进行查询,你必须使用实体管理器(这里是一个例子)stackoverflow.com/questions/55513776/…
  • 澄清一下,JpaRepository 它只是一个接口,提供了一些杂物。不多不少。因此,如果没有实体,您将无法使用该接口,因为该接口需要那些信息(实体和 id 类型)

标签: spring-data-jpa


【解决方案1】:

您可以将select new 资源用于您的普通班级。例如,我有映射类Student, Team, School, Subject 并想从这些实体中获取一些数据。并构建一个普通的StudentData类 所以我可以这样查询(@Query or @NamedQuery):

select new com.my.package.vo.StudentData(student, teacher, subject) from Stutdent student inner join student.team inner join team.teacher ....

【讨论】:

  • 我们没有映射类和实体类。我们遵循 XML 方法
猜你喜欢
  • 2021-06-08
  • 2015-09-11
  • 1970-01-01
  • 2019-09-30
  • 2013-05-09
  • 2019-10-01
  • 2020-03-26
  • 1970-01-01
  • 2014-07-21
相关资源
最近更新 更多