我不知道如何使用 JPQL [AND] 和 [OR]
I don't know how to use JPQL [AND] and [OR]
我做了一个应用程序,它可以搜索书名 author.I 使用 JPQL 实现 it.When 我填写了两个文本框(书名和作者),它搜索 right.But 我填了一个文本框,它搜索没有找到。
如何解决?
Book.java
@Table(name = "books")
@NamedQueries({
@NamedQuery(name = "searchNameAndAuthor", query = "SELECT b FROM Book AS b WHERE b.book_name =:book_name and b.author=:author"),
@NamedQuery(name = "searchNameAndAuthorCount", query = "SELECT count(b) FROM Book AS b WHERE b.book_name =:book_name and b.author=:author")
})
@Entity
public class Book {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "isbn_code", length = 17)
private Integer isbn_code;
@Column(name = "book_name", length = 30, nullable = false)
private String book_name;
@Column(name = "author", length = 20)
private String author;
@Column(name = "publisher", length = 20)
private String publisher;
@Column(name = "publish_date", length = 8)
private Date publish_date;
@Column(name = "stock", length = 4)
private Integer stock;
search.jsp
<c:import url="/WEB-INF/views/layout/app.jsp">
<c:param name="content">
<c:if test="${flush != null}">
<div id="flush_success">
<c:out value="${flush}"></c:out>
</div>
</c:if>
<h2>図書館ようこそ</h2>
<form method="POST" action="<c:url value='/books/search/result' />">
<label for="book_name">調べたいタイトル</label><br /> <input type="text"
name="book_name" value="${book_name}" /> <br />
<br />
<label for="author">著者</label><br /> <input type="text"
name="author" value="${author}" /> <br />
<br />
<button type="submit">検索</button>
</form>
</c:param>
</c:import>
您还需要处理 null 情况。一种可以检查的方法是参数为 null 作为 OR 条件
SELECT b FROM Book AS b WHERE (:book_name IS NULL OR b.book_name =:book_name)
and (:author IS NULL OR b.author=:author)
我做了一个应用程序,它可以搜索书名 author.I 使用 JPQL 实现 it.When 我填写了两个文本框(书名和作者),它搜索 right.But 我填了一个文本框,它搜索没有找到。 如何解决?
Book.java
@Table(name = "books")
@NamedQueries({
@NamedQuery(name = "searchNameAndAuthor", query = "SELECT b FROM Book AS b WHERE b.book_name =:book_name and b.author=:author"),
@NamedQuery(name = "searchNameAndAuthorCount", query = "SELECT count(b) FROM Book AS b WHERE b.book_name =:book_name and b.author=:author")
})
@Entity
public class Book {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "isbn_code", length = 17)
private Integer isbn_code;
@Column(name = "book_name", length = 30, nullable = false)
private String book_name;
@Column(name = "author", length = 20)
private String author;
@Column(name = "publisher", length = 20)
private String publisher;
@Column(name = "publish_date", length = 8)
private Date publish_date;
@Column(name = "stock", length = 4)
private Integer stock;
search.jsp
<c:import url="/WEB-INF/views/layout/app.jsp">
<c:param name="content">
<c:if test="${flush != null}">
<div id="flush_success">
<c:out value="${flush}"></c:out>
</div>
</c:if>
<h2>図書館ようこそ</h2>
<form method="POST" action="<c:url value='/books/search/result' />">
<label for="book_name">調べたいタイトル</label><br /> <input type="text"
name="book_name" value="${book_name}" /> <br />
<br />
<label for="author">著者</label><br /> <input type="text"
name="author" value="${author}" /> <br />
<br />
<button type="submit">検索</button>
</form>
</c:param>
</c:import>
您还需要处理 null 情况。一种可以检查的方法是参数为 null 作为 OR 条件
SELECT b FROM Book AS b WHERE (:book_name IS NULL OR b.book_name =:book_name)
and (:author IS NULL OR b.author=:author)