Netbeans - 通过Glassfish连接MySQL的未知实体类型

时间:2013-05-27 14:14:27

标签: java

所以我已经陷入困境,需要帮助。我不知道如何继续这个和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中写任何东西。

有人可以帮我解决这个问题吗? 很抱歉只在一篇文章中提供了大量信息,但希望展示一些东西,以便有人可以把我扔向正确的方向。

抱歉任何拼写错误。

1 个答案:

答案 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")