在同一个实体类上运行两个@NamedNativeQuery查询

时间:2016-08-01 16:17:05

标签: spring spring-data spring-data-jpa named-query spring-repositories

我想在实体类上定义两个@NamedNativequery。绑定以定义eclipse会产生错误。

  

重复注释非可重复类型@NamedNativeQuery。只要   标记为@Repeatable的注释类型可以多次使用一次   目标

从那个错误,我知道我们不能定义两个定义两个实体类的@NamedNativeQuery,如

    @Entity
    @Table(name = "abc")
    @NamedNativeQuery(name = "ABC.getSomeMethod1" query = "some_query",resultSetMapping ="abcDTO")//1st name query
   // @NamedNativeQuery(name = "some_name" query = "some_query",resultSetMapping ="some_dto")//try to define second query , but gives error
    public class ABC {

      }

我在dao层使用spring存储库来调用与此查询绑定的方法

  public interface SomeInterface extends JpaRepository<ABC, Long> {


    @Query(nativeQuery =true)
   List<ABCDTO> getSomeMethod1(@Param("someParam1")  long someParam1, @Param("someParam2") String someParam2);


   }

Senario是我想运行第一个本机sql(运行正常)查询然后运行第二个本机sql查询(想要从同一个运行它)。如何解决这个问题或者解决方案是什么。

如果这样我无法运行两个本机sql查询,那么还有其他任何可以实现此目的。

1 个答案:

答案 0 :(得分:4)

您可以像这样定义多个命名查询

@NamedNativeQueries({
    @NamedNativeQuery(name = "ABC.getSomeMethod1" 
                      query = "some_query",resultSetMapping ="abcDTO"
    ),
  @NamedNativeQuery(name = "some_name" 
     query = "some_query",resultSetMapping ="some_dto"
    )
})

然后在交易下的业务层中,您可以一个接一个地调用这两个查询,

如果它是两个实体之间的简单连接并选择并显示更好的连接。永远记得在表中包含那些列索引;)