Java 在Spring@query注释中对Oracle/PostgreSql使用特定的本机查询

Java 在Spring@query注释中对Oracle/PostgreSql使用特定的本机查询,java,spring,spring-boot,spring-data-jpa,spring-repositories,Java,Spring,Spring Boot,Spring Data Jpa,Spring Repositories,我在spring存储库中有一个方法像native @Repository public interface MessageRepository extends JpaRepository<Message, String> { @Query(value = "select sm.* from MESSAGES ...", nativeQuery = true) List<Message> findReadyToSend(); } 但是如何将此字符串传递给@

我在
spring存储库中有一个方法
native

@Repository
public interface MessageRepository extends JpaRepository<Message, String> {
    @Query(value = "select sm.* from MESSAGES ...", nativeQuery = true)
    List<Message> findReadyToSend();
}
但是如何将此字符串传递给
@Query
注释?大概是这样的:

String query - get from config;

@Query(value = query)

也许有一个正确的方法可以做到这一点?

我的想法是提供两个良好的老式接口实现,并添加@Profile注释,以便根据活动的spring概要文件指示要激活的bean

因此,接口将是:

public interface MessageRepository extends JpaRepository<Message, String> {
    List<Message> findReadyToSend();
}
public interface MessageRepository扩展了JpaRepository{
列出findTorSend();
}
您将有两个实现,一个用于Oracle,另一个用于Postgres:

   @Profile("Oracle")
   @Repository
    public class MessageRepositoryOracleImpl implements MessageRepository  {

    @Override
    List<Message> findReadyToSend(){
    Query oracleQuery = .....
    return result;
    }
        .....
@Profile(“Oracle”)
@存储库
公共类MessageRepositoryOracleImpl实现MessageRepository{
@凌驾
列表findTorSend(){
查询oracleQuery=。。。。。
返回结果;
}
.....

@Profile(“Postgres”)
@存储库
公共类MessageRepositoryPostgresImpl实现MessageRepository{
@凌驾
列表findTorSend(){
查询postgresQuery=。。。。。
返回结果;
}
....
确保实现由Spring上下文拾取。从@Repository注释中,我假设您使用的是组件扫描。如果不是,则需要在Java配置中定义bean,并在其中使用@Profile注释

   @Profile("Oracle")
   @Repository
    public class MessageRepositoryOracleImpl implements MessageRepository  {

    @Override
    List<Message> findReadyToSend(){
    Query oracleQuery = .....
    return result;
    }
        .....
 @Profile("Postgres")
 @Repository
 public class MessageRepositoryPostgresImpl implements MessageRepository  {

    @Override
    List<Message> findReadyToSend(){
    Query postgresQuery = .....
    return result;
    }
        ....