-
1. Re: I'm getting this error and I don't know why: Could not determine type for: javax.persistence.EntityManagerFactory, at table:Student, for columns: [org.hibernate.mapping.Column(em)]
csa May 8, 2014 11:56 AM (in response to swilliams7996)Hi Stacy,
Your JPA entities should not have a field of type EntityManagerFactory, since there's no matching column in your DB. What's the purpose of this field? You shouldn't need access to an entity manager from within an entity.
Cheers,
Christian
-
2. Re: I'm getting this error and I don't know why: Could not determine type for: javax.persistence.EntityManagerFactory, at table:Student, for columns: [org.hibernate.mapping.Column(em)]
swilliams7996 May 8, 2014 3:48 PM (in response to swilliams7996)Thank you, now I'm getting another error in my session bean"Named query not found: SELECT s FROM Student.class s" here is the code: I know the method it's complaining about but I'm unsure what to do.
@Stateless
@Local(StudentDaoLocal.class)
@LocalBean
public class StudentDao implements StudentDaoLocal {
@PersistenceContext
private EntityManager em;
@Override
public Student getStudent(int studentId){
return em.find(Student.class,studentId);
}
@Override
public void addStudent(Student student){
em.persist(student);
}
@Override
public void editStudent(Student student){
em.merge(student);
}
@Override
public void deleteStudent(int studentId){
em.remove(getStudent(studentId));
}
@SuppressWarnings("unchecked")
@Override
public List<Student>getAllStudents(){
//return em.createNamedQuery("Student.getAll").getResultList(); // This is the method it's complaining about
//return em.createQuery("Student.getAllStudents").getResultList();
return em.createNamedQuery("SELECT s FROM Student s").getResultList();
}
public StudentDao() {
}
}
-
3. Re: I'm getting this error and I don't know why: Could not determine type for: javax.persistence.EntityManagerFactory, at table:Student, for columns: [org.hibernate.mapping.Column(em)]
csa May 8, 2014 7:42 PM (in response to swilliams7996)Hi,
Yes, that's because createNamedQuery expects a query name as parameter not the actual query:
http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#example-named-query-annotation
Cheers,
Christian
-
4. Re: I'm getting this error and I don't know why: Could not determine type for: javax.persistence.EntityManagerFactory, at table:Student, for columns: [org.hibernate.mapping.Column(em)]
swilliams7996 May 13, 2014 5:38 PM (in response to swilliams7996)Okay, I'm having another problem now. It seem like the application is working but when I try to test it, like adding data or deleting data it doesn't do anything. I'm assumming this is either the servlet or JSP page, here is the code.
package com.joseph.dao;
import java.util.List;
import com.joseph.dao.view.StudentDaoLocal;
import com.joseph.model.Student;
import javax.ejb.Local;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
/**
* Session Bean implementation class StudentDao
*/
@Stateless
@Local(StudentDaoLocal.class)
@LocalBean
public class StudentDao implements StudentDaoLocal {
@PersistenceContext
private EntityManager em;
@Override
public Student getStudent(int studentId){
return em.find(Student.class,studentId);
}
@Override
public void addStudent(Student student){
em.persist(student);
}
@Override
public void editStudent(Student student){
em.merge(student);
}
@Override
public void deleteStudent(int studentId){
em.remove(getStudent(studentId));
}
@SuppressWarnings("unchecked")
@Override
public List<Student>getAllStudents(){
Query query = em.createQuery("SELECT s FROM Student s");
return query.getResultList();
}
public StudentDao() {
}
}
Servlet:
package com.joseph.controller;
import java.io.IOException;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.joseph.dao.view.StudentDaoLocal;
import com.joseph.model.Student;
/**
* Servlet implementation class StudentServlet
*/
@WebServlet("/StudentServlet")
public class StudentServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@EJB
private StudentDaoLocal studentDao;
public StudentServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String action = request.getParameter("action");
String StudentIdStr = request.getParameter("studentId");
int studentId=0;
if(StudentIdStr !=null && !StudentIdStr.equals(""))
studentId=Integer.parseInt(StudentIdStr);
String firstname= request.getParameter("firstname");
String lastname = request.getParameter("lastname");
String yearLevelStr = request.getParameter("yearLevel");
int yearLevel=0;
if(yearLevelStr!=null && !yearLevelStr.equals(""))
yearLevel=Integer.parseInt(yearLevelStr);
Student student = new Student(studentId,firstname,lastname,yearLevel);
if("Add".equalsIgnoreCase(action)){
studentDao.addStudent(student);
}else if("Edit".equalsIgnoreCase(action)){
studentDao.editStudent(student);
}else if("Delete".equalsIgnoreCase(action)){
studentDao.deleteStudent(studentId);
}else if("Search".equalsIgnoreCase(action)){
student = studentDao.getStudent(studentId);
}
request.setAttribute("student", student);
request.setAttribute("allStudent", studentDao.getAllStudents());
request.getRequestDispatcher("studentinfo.jsp").forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
// JPA
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "student")
public class Student implements Serializable{
private static final long serialVersionUID = 1L;
@GeneratedValue(strategy=GenerationType.AUTO)
@Id
private int studentId;
private String firstname;
private String lastname;
private int yearLevel;
public int getStudentId() {
return studentId;
}
public void setStudentId(int studentId) {
this.studentId = studentId;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public int getYearLevel() {
return yearLevel;
}
public void setYearLevel(int yearLevel) {
this.yearLevel = yearLevel;
}
public Student(int studentId, String firstname, String lastname,
int yearLevel) {
super();
this.studentId = studentId;
this.firstname = firstname;
this.lastname = lastname;
this.yearLevel = yearLevel;
}
public Student(){}
}
// JSP Page
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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=ISO-8859-1">
<title>Student Information</title>
</head>
<body>
<h1>Student Information</h1>
<form action="/StudentServlet" method="POST"></form>
<table>
<tr>
<td>Student ID</td>
<td><input type="text" name="studentId" value=" "/></td>
</tr>
<tr>
<td>First Name</td>
<td><input type="text" name="firstname" value=" "/></td>
</tr>
<tr>
<td>Last Name</td>
<td><input type="text" name="lastname" value=" "/></td>
</tr>
<tr>
<td>Year Level</td>
<td><input type="text" name="yearLevel" value=" "/></td>
</tr>
<tr>
<td colspan="2">
<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"/>
</td>
</tr>
</table>
<br>
<table>
<tr>
<th>ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>Year Level</th>
</tr>
<c:forEach items="${allStudents}" var="stud">
<tr>
<td><c:out value= "${stud.studentId}"/></td>
<td><c:out value="${stud.firstname}"/></td>
<td><c:out value="${stud.lastname}"/></td>
<td><c:out value="${stud.yearLevel}"/></td>
</tr>
</c:forEach>
</table>
</body>
</html>
-
5. Re: I'm getting this error and I don't know why: Could not determine type for: javax.persistence.EntityManagerFactory, at table:Student, for columns: [org.hibernate.mapping.Column(em)]
swilliams7996 May 17, 2014 8:51 PM (in response to swilliams7996)Can someone look at my servlet, because I think that is the reason why I'm not getting any action when I click the add, search, edit and delete buttone.