PostgreSQL 查询适用于 pgAdmin 但不适用于 Spring Boot
PostgreSQL query works on pgAdmin but not in Spring Boot
查询SELECT * FROM books WHERE (isbn || ' ' || author || ' ' || name) ILIKE '%el%'
returns
在 pgAdmin(PostgreSQL 工具)中执行时来自完整数据库
但是当我尝试在 Spring 引导中 运行 它时,相同的查询似乎不起作用,它 returns 是一个空列表。我不知道我的查询是特定于 PostgreSQL 还是原生的 SQL,如果它不是原生的 SQL 那么我想它不起作用是合理的,因为我看到有 nativeQuery = true
,如果我理解正确的话,这意味着本机 SQL 是预期的。没有它,应用程序甚至 运行。如果情况与描述的一样,我如何指定我想在查询中使用 PostgreSQL?
BookController.java
@GetMapping("/search")
public String search(@RequestParam(value = "keyword") String keyword, Model model) {
List<Book> books = bookService.search(keyword);
model.addAttribute("books", books);
return "books";
}
BookService.java
public List<Book> search(String keyword) {
return bookRepository.search(keyword);
}
BookRepository.java
@Repository
public interface BookRepository extends CrudRepository<Book, Long> {
List<Book> findAll();
@Query(value = "SELECT * FROM books WHERE (isbn || ' ' || author || ' ' || name) ILIKE '%?%'", nativeQuery = true)
List<Book> search(String keyword);
}
Books.html
我输入的值是 el
.
<form class="col-12 col-lg-auto mb-3 mb-lg-0 me-lg-3" th:action="@{books/search}" method="get">
<input th:name="keyword" type="search" class="form-control form-control-dark" placeholder="Search..." aria-label="Search">
</form>
尝试
@Query(value = "SELECT * FROM books WHERE (isbn || ' ' || author || ' ' || name) ILIKE %?1%", nativeQuery = true)
List<Offers> search(String keyword);
参数 ?
可能未在查询中正确应用。将 '%?%'
更改为 '%' || ? || '%'
,如:
@Query(value = "SELECT * FROM books WHERE (isbn || ' ' || author || ' ' || name) ILIKE '%' || ? || '%'", nativeQuery = true)
查询SELECT * FROM books WHERE (isbn || ' ' || author || ' ' || name) ILIKE '%el%'
returns
在 pgAdmin(PostgreSQL 工具)中执行时来自完整数据库
但是当我尝试在 Spring 引导中 运行 它时,相同的查询似乎不起作用,它 returns 是一个空列表。我不知道我的查询是特定于 PostgreSQL 还是原生的 SQL,如果它不是原生的 SQL 那么我想它不起作用是合理的,因为我看到有 nativeQuery = true
,如果我理解正确的话,这意味着本机 SQL 是预期的。没有它,应用程序甚至 运行。如果情况与描述的一样,我如何指定我想在查询中使用 PostgreSQL?
BookController.java
@GetMapping("/search")
public String search(@RequestParam(value = "keyword") String keyword, Model model) {
List<Book> books = bookService.search(keyword);
model.addAttribute("books", books);
return "books";
}
BookService.java
public List<Book> search(String keyword) {
return bookRepository.search(keyword);
}
BookRepository.java
@Repository
public interface BookRepository extends CrudRepository<Book, Long> {
List<Book> findAll();
@Query(value = "SELECT * FROM books WHERE (isbn || ' ' || author || ' ' || name) ILIKE '%?%'", nativeQuery = true)
List<Book> search(String keyword);
}
Books.html
我输入的值是 el
.
<form class="col-12 col-lg-auto mb-3 mb-lg-0 me-lg-3" th:action="@{books/search}" method="get">
<input th:name="keyword" type="search" class="form-control form-control-dark" placeholder="Search..." aria-label="Search">
</form>
尝试
@Query(value = "SELECT * FROM books WHERE (isbn || ' ' || author || ' ' || name) ILIKE %?1%", nativeQuery = true)
List<Offers> search(String keyword);
参数 ?
可能未在查询中正确应用。将 '%?%'
更改为 '%' || ? || '%'
,如:
@Query(value = "SELECT * FROM books WHERE (isbn || ' ' || author || ' ' || name) ILIKE '%' || ? || '%'", nativeQuery = true)