所以我已经陷入困境,需要帮助。我不知道如何继续这个和figuerd我应该寻求帮助。我在youtube和互联网上查找一些关于如何解决我的问题的教程,但没有人帮助过。我尝试了很多解决方案,但没有人工作过。
我正在尝试做的事情是Case Managment系统(简单的虚拟cms不是一个大的),我正在努力扩展我在java编码方面的知识。 csm应该通过一个web应用程序运行,该应用程序将通过你应该能够添加的web应用程序连接到MySQL。编辑。我只是在JSP和Servlet中创建它。
我相信我在代码方面做得很好,但我不是百分之百确定,因为我没有设法运行webapp。我的问题是我得到一个错误框架Glassfish“错误编译查询[Ärende.getAll:SELECT e FROM cases e]。未知实体类型[案例]”。我在网上搜索,发现这是错误的SQL查询。但无论我怎样,我都无法让它发挥作用。
我正在尝试通过persistence.xml访问数据库(mydb)。
这是我的代码
首先我们有setter和getter(还有一些单词是用瑞典语写的,所以如果它有点难以理解我会道歉)
@Entity
@Table
@NamedQueries(@NamedQuery(name =“Ärende.getAll”,query =“SELECT e FROM cases e”))
查询部分是我认为错误的部分,但即使我写“Ärendee”而不是它也不起作用public class Ärende implements Serializable { @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column private int idcases; @Column private String Namn; @Column private String Prioritet; @Column private String Status; public int getIdcases() { return idcases; } public void setIdcases(int idcases) { this.idcases = idcases; } public String getNamn() { return Namn; } public void setNamn(String Namn) { this.Namn = Namn; } public String getPrioritet() { return Prioritet; } public void setPrioritet(String Prioritet) { this.Prioritet = Prioritet; } public String getStatus() { return Status; } public void setStatus(String Status) { this.Status = Status; } public Ärende(int idcases, String Namn, String Prioritet, String Status) { this.idcases = idcases; this.Namn = Namn; this.Prioritet = Prioritet; this.Status = Status; } public Ärende(){} }
我做的第二件事是创建“Ärende”Dao和Local
@Stateless public class ÄrendeDao implements ÄrendeDaoLocal { @PersistenceContext private EntityManager em; @Override public void addÄrende(Ärende ärende) { em.persist(ärende); } @Override public void editÄrende(Ärende ärende) { em.merge(ärende); } @Override public void deleteÄrende(int idcases) { em.remove(getÄrende(idcases)); } @Override public Ärende getÄrende(int idcases) { return em.find(Ärende.class, idcases); } @Override public List<Ärende> getAllÄrende() { return em.createNamedQuery("Ärende.getAll").getResultList(); } }
本地
@Local public interface ÄrendeDaoLocal { void addÄrende(Ärende ärende); void editÄrende(Ärende ärende); void deleteÄrende(int idcases); Ärende getÄrende(int idcases); List<Ärende> getAllÄrende(); }
好吧,在那个艰难的过程之后,我最终创建了Servlet,然后是JSP
的Servlet
@WebServlet(name =“ÄrendeServlet”,urlPatterns = {“/ _rendeServlet”}) 公共类ÄrendeServlet扩展HttpServlet { @EJB 私人ÄrendeDaoLocalärendeDao;
protected void processRequest(HttpServletRequest request, HttpServletResponse >Response) throws ServletException, IOException { String action = request.getParameter("action"); String idcasesStr = request.getParameter("idcases"); int idcases=0; if(idcasesStr!=null && !idcasesStr.equals("")) idcases=Integer.parseInt(idcasesStr); String Namn = request.getParameter("Namn"); String Prioritet = request.getParameter("Prioritet"); String Status = request.getParameter("Status"); Ärende ärende = new Ärende(idcases, Namn, Prioritet, Status); if("Add".equalsIgnoreCase(action)){ ärendeDao.addÄrende(ärende); }else if("Edit".equalsIgnoreCase(action)){ ärendeDao.editÄrende(ärende); }else if("Delete".equalsIgnoreCase(action)){ ärendeDao.deleteÄrende(idcases); }else if("Search".equalsIgnoreCase(action)){ ärende = ärendeDao.getÄrende(idcases); } request.setAttribute("ärende", ärende); request.setAttribute("allÄrende", ärendeDao.getAllÄrende()); request.getRequestDispatcher("ärendeinfo.jsp").forward(request,response); }
JSP
<form action="./ÄrendeServlet" method="POST"> <td>Ärende ID</td> <td><input type="text" name="idcases" value="${ärende.idcases}" /></td> <td>Namn</td> <td><input type="text" name="Namn" value="${ärende.Namn}" /></td> <td>Prioritet</td> <td><input type="text" name="Prioritet" value="${ärende.Prioritet}" /> <td><input type="text" name="Status" value="${ärende.Status}" /></td> <input type="submit" name="action" value="Add" /> <input type="submit" name="action" value="Edit" /> <input type="submit" name="action" value="Delete" /> <input type="submit" name="action" value="Search" />
---相同的JSP这将列出以下所有案例---
<th>Ärende ID</th> <th>Namn</th> <th>Prioritet</th> <th>Status</th> <c:forEach items="${allÄrende}" var="stud"> <tr> <td>${stud.idcases}</td> <td>${stud.Namn}</td> <td>${stud.Prioritet}</td> <td>${stud.Status}</td> </tr> </c:forEach>
这就是代码部分的全部内容,现在当我试图破坏它时,我得到错误,我的数据库通过glassfish JDBC连接,并且它正确地进行了PING。
有关数据库的信息: 我正在尝试连接的数据库tabel名称称为:cases 数据库名称是:mydb 主机名:root 密码是:vedo
我也在想我是否应该使用persistence.xml做更多的事情,因为我没有在persistence.xml中写任何东西。
有人可以帮我解决这个问题吗? 很抱歉只在一篇文章中提供了大量信息,但希望展示一些东西,以便有人可以把我扔向正确的方向。
抱歉任何拼写错误。
答案 0 :(得分:0)
@Entity
@Table
@NamedQueries(
@NamedQuery(name="Ärende.getAll",query = "SELECT e FROM cases e")
)
public class Ärende implements Serializable
问题是,您的班级名为Ärende,但在您的命名查询中,您会使用案例。命名查询应为:
@NamedQuery(name="Ärende.getAll",query = "SELECT e FROM Ärende e")