Reputation: 51
I've tried to create simple JPA aplication using MySql and Hibernate, I want load 4 records from table student db table
but i recieve this error:
Exception in thread "main" javax.ejb.EJBTransactionRolledbackException: Named query not found: findAll
Here is my Entity Class
package entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
@Entity
@Table(name="student")
@NamedQueries({
@NamedQuery(name = "findAll", query = "select st from student st")
})
public class student{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@Column(name="name")
private String name;
@Column(name="surname")
private String surname;
@Column(name="sex")
private String sex;
public student(String name, String surname, String sex) {
this.name = name;
this.surname = surname;
this.sex = sex;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "student [id=" + id + ", name=" + name + ", surname=" + surname + ", sex=" + sex + "]";
}
DAO
package dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import entity.student;
public class StudentDAO {
public List<student> getAllStd(EntityManager em){
TypedQuery<student> q = em.createNamedQuery("findAll", student.class);
return q.getResultList();
}
}
and finally bean that calls the DAO method
package test;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import dao.StudentDAO;
import entity.student;
@Stateless
public class Test2Bean {
@PersistenceContext()
private EntityManager em;
public void getAllStudents(){
StudentDAO stdDAO = new StudentDAO();
List<student> students = stdDAO.getAllStd(em);
System.out.println(students.size());
}
}
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="mysql">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/mysqlds</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.use_sql_comments" value="true" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
</properties>
</persistence-unit>
</persistence>
i have no idea why DAO method cant access query, i made few test methods in entity class and DAO method has access to Entity Student.
Thanks for all answers
Upvotes: 1
Views: 958
Reputation: 11
Probably if you mark StudentDAO as @Stateless does solve it, because of the context where is used the entity manager. Also is possible to work if you use the entity manager in Test2Bean .
Upvotes: 1
Reputation: 109
Try...
@Entity
@Table(name="student")
@NamedQueries({
@NamedQuery(name = "Student.findAll", query = "select st from student st")
})
public class student{
Add Student. before "findAll"
not sure if that's it but my named queries normally have that.
Upvotes: 1