Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 使用JPQL选择实体时未调用SQL_Jpa_Jakarta Ee_Ejb_Eclipselink_Jpql - Fatal编程技术网

Jpa 使用JPQL选择实体时未调用SQL

Jpa 使用JPQL选择实体时未调用SQL,jpa,jakarta-ee,ejb,eclipselink,jpql,Jpa,Jakarta Ee,Ejb,Eclipselink,Jpql,我有一个表格FAQ(常见问题) 这是豆子: package projet.helpdesk.beans; import javax.persistence.*; @Entity @Table(name="faq") public class FAQ { @Id private int id_qr; private int id_technicien; private String question; private String reponse

我有一个表格FAQ(常见问题)

这是豆子:

   package projet.helpdesk.beans;

import javax.persistence.*;

@Entity
@Table(name="faq")
public class FAQ {

    @Id
    private int id_qr;
    private int id_technicien;
    private String question;
    private String reponse;

    public int getId_qr() {
        return id_qr;
    }
    public void setId_qr(int id_qr) {
        this.id_qr = id_qr;
    }
    public int getId_technicien() {
        return id_technicien;
    }
    public void setId_technicien(int id_technicien) {
        this.id_technicien = id_technicien;
    }
    public String getQuestion() {
        return question;
    }
    public void setQuestion(String question) {
        this.question = question;
    }
    public String getReponse() {
        return reponse;
    }
    public void setReponse(String reponse) {
        this.reponse = reponse;
    }

}
这是DAO类: 函数
public List chargerFAQ()
应该返回常见问题列表。 JPQL查询是:
private static final String JPQL\u SELECT\u ALL=“SELECT f FROM FAQ f”

`package projet.helpdesk.dao;
导入java.util.List;
导入javax.ejb.Stateless;
导入javax.persistence.EntityManager;
导入javax.persistence.NoResultException;
导入javax.persistence.PersistenceContext;
导入javax.persistence.Query;
导入projet.helpdesk.beans.FAQ;
@无国籍
公共类FAQDao{
私有静态最终字符串JPQL\u SELECT\u ALL=“从FAQ f中选择f”;
私有静态最终字符串JPQL\u SELECT\u QR=“从FAQ f中选择f,其中id\u QR=:id\u QR”;
私有静态最终字符串参数=“id\u qr”;
@PersistenceContext(unitName=“bdd\U帮助热线\U PU”)
私人实体管理者;
public void creer(常见问题解答)抛出IllegalArgumentException、DAOException{
试一试{
em.persist(常见问题);
}捕获(例外e){
抛出新的异常(e);
}     
}
公共列表chargerFAQ()引发异常{
列出常见问题;
Query Query=em.createQuery(JPQL\u SELECT\u ALL);
试一试{
ListFaq=(List)query.getResultList();
}捕获(noresulte异常){
返回null;
}捕获(例外e){
抛出新的异常(e);
}
返回列表FAQ;
}
公共常见问题解答trouverQR(int id\U qr)引发异常{
常见问题解答;
Query Query=em.createQuery(JPQL\u SELECT\u QR);
query.setParameter(参数,id\u qr);
试一试{
qr=(FAQ)query.getSingleResult();
}捕获(noresulte异常){
返回null;
}捕获(例外e){
抛出新的异常(e);
}
返回qr;
}
}
`

持久化FAQ实体成功,但加载数据不会返回任何内容,可能是查询指令错误

下面是servlet:

`@WebServlet ( urlPatterns = { "/afficherfaq" })
public class AfficherFaq extends HttpServlet {

    @EJB
    private FAQDao faqDao;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.getServletContext().getRequestDispatcher("/WEB-INF/ChargerFaq.jsp").forward(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<FAQ> lfaq = faqDao.chargerFAQ();
        request.setAttribute("lfaq", lfaq);
        this.getServletContext().getRequestDispatcher("/WEB-INF/ChargerFaq.jsp").forward(request, response);

    }   
}
`@WebServlet(urlPatterns={”/afficherfaq})
公共类AfficherFaq扩展了HttpServlet{
@EJB
私人发夹;
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
this.getServletContext().getRequestDispatcher(“/WEB-INF/ChargerFaq.jsp”).forward(请求,响应);
}
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
List lfaq=faqDao.chargerFAQ();
setAttribute(“lfaq”,lfaq);
this.getServletContext().getRequestDispatcher(“/WEB-INF/ChargerFaq.jsp”).forward(请求,响应);
}   
}
` 实体的路径包含在persistence.xml文件中

编辑:添加了JSP代码。 显示结果的JSP文件:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
     <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link type="text/css" rel="stylesheet" href="inc/style.css" />
<title>Foire aux questions</title>
</head>
<body>
Test
    <c:forEach items="${lfaq}" var="faq" varStatus="boucle">
    <fieldset>
    <p><span class="info">Question:</span></p><br>
        <p>${faq.question}</p><br>
    <p><span class="info">Reponse:</span></p><br>
        <p>${faq.reponse}</p><br>
    </fieldset><br><br>
    </c:forEach>    
</body>
</html>

附加问题
试验
问题:


${faq.question}


回复:


${faq.response}





“持久化FAQ实体成功”-它没有出现异常,但也没有做任何事情。更改(persist、merge、delete等)仅在有刷新调用或事务提交时与数据库同步,因此不会发生任何事情。而更改通常只有在事务提交后才可见。将您的方法包装到事务中。很抱歉,我正在尽我最大的努力理解您的评论,实际上与我发布的代码类似,在那里我添加了jsp代码,无法理解您所说的事务是什么意思。请参阅,其中描述了JPA如何使用事务,以及它们是数据库操作的基础。如果您的操作未参与事务,JPA将不会向数据库写入任何内容。不,EclipseLink/JPA不会为您处理事务。如果它在其他地方工作,那么您必须使用JTA并让容器在事务中包装内容。如果有疑问,请调用em.flush,如果它不在事务中,JPA将抛出异常。今天我学到了一些东西。
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
     <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link type="text/css" rel="stylesheet" href="inc/style.css" />
<title>Foire aux questions</title>
</head>
<body>
Test
    <c:forEach items="${lfaq}" var="faq" varStatus="boucle">
    <fieldset>
    <p><span class="info">Question:</span></p><br>
        <p>${faq.question}</p><br>
    <p><span class="info">Reponse:</span></p><br>
        <p>${faq.reponse}</p><br>
    </fieldset><br><br>
    </c:forEach>    
</body>
</html>