С какими проблемами вы сталкиваетесь при адаптации к JPQL?Использование родных / пользовательских функций?Это может показаться слишком сложным, но вы можете найти способ, используя критерии + функция function из JPA 2.1+, взгляните на эту статью .
Onс другой стороны, я нашел здесь мой старый обходной путь, который мог бы помочь.Есть простой способ решить эту проблему, используя несколько ярлыков с аннотацией @Profile и некоторые дополнительные интерфейсы.
Если вы предоставляете интерфейс с ожидаемым собственным методом запроса, расширяющим JpaRepository, например:
@NoRepositoryBean
public interface MessageRepository extends JpaRepository<Message, String>{
List<Message> findByReady();
}
Обратите внимание на @NoRepositoryBean
, избегая дублирования bean-компонентов с профильной специализацией.
Затем просто предоставьте свои реализации в соответствии с вашими потребностями:
@Repository
@Profile("oracle")
public interface MessageOracleRepository extends MessageRepository {
@Query(value = "select m.* from Message m where m.ready = false", nativeQuery = true)
List<Message> findByReady();
}
... и ...
@Repository
@Profile("mysql")
public interface MessageMySQLRepository extends MessageRepository {
@Query(value = "select m.* from Message m where m.ready = true", nativeQuery = true)
List<Message> findByReady();
}
Теперь вам нужно будет только указать нужный профиль, внедрить и использовать правильные собственные запросы.
Как вы видите, я упростил запросы для простоты.Взгляните на этот репозиторий с адаптированным кодом.