我在使用 Glassfish 3.1.2 + JPA + EclipseLink + MySQL 开发的应用程序上遇到了问题,在我部署应用程序后(DB 上没有表)它运行得很好,显然执行了唯一的查询(表中的实体计数)我输入的。但是如果我重新加载页面,再次调用 servlet 会导致抛出异常:TransactionRolledbackLocalException
显然与用于计算实体的方法相同。
然后如果我再次重新加载,它运行得很好,然后再次异常,很好,异常等等......
这是我的 servlet:
@WebServlet(name="Controller", urlPatterns={"/Controller"})
public class Controller extends HttpServlet {
private static final long serialVersionUID = 1L;
@EJB WineDao _wines;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
_wines.countWines();
RequestDispatcher view = request.getRequestDispatcher("ShowAll.jsp");
view.forward(request, response);
}
}
Run Code Online (Sandbox Code Playgroud)
这是 WineDao:
@Stateless
public class WineDao {
@PersistenceContext private EntityManager em;
public Long countWines() {
CriteriaBuilder qb = em.getCriteriaBuilder();
CriteriaQuery<Long> cq = qb.createQuery(Long.class);
cq.select(qb.count(cq.from(Wine.class)));
return em.createQuery(cq).getSingleResult(); …Run Code Online (Sandbox Code Playgroud)