2013-02-11 2 views
0

Я использую аннотацию для именованного запроса в hibernate.I есть два класса класс POJO и главный класс class.The POJO выглядит следующим образомУ меня есть вопрос в спящем namedquery

@NamedQuery(
    name="findEmployeeName", 
    query="select * from employee " 
) 


@Entity 
@Table(name="employee") 
public class Employeenam { 
    public String tostring(){return id+" " +name+ " " +salary+ " " +job;} 

    @Id 
    @GeneratedValue 
    @Column(name="id") 
    int id; 

    @Column(name="name") 
    String name; 

    @Column(name="salary") 
    int salary; 

    @Column(name="job") 
    String job; 

    public int setempId(){ 
     return id; 
    } 

    public void getempId(int Id){ 
     this.id=Id; 
    } 

    public String setempName(){ 
     return name; 
    } 

    public void getempName(String Name){ 
     this.name=Name; 
    } 

    public int getempSalary(){ 
     return salary; 
    } 

    public void setempSalary(int Salary){ 
     this.salary=Salary; 
    } 

    public String setempJob(){ 
     return job; 
    } 

    public void getempJob(String Job){ 
     this.job=Job; 
    } 
} 

and the main class as follows 

    public class FetchData{ 
    public static void main(String[] args){ 

     Configuration configuration=new Configuration(); 
     configuration.configure("hibernate.cfg.xml"); 
     SessionFactory sfactory=configuration.buildSessionFactory(); 
     Session session=sfactory.openSession(); 
     Query query=session.getNamedQuery("findEmployeeName"); 
     query.setString("name", "dfdsf"); 
     query.setInteger("id", 34); 
     query.setInteger("salary", 3543); 
     query.setString("job", "dfgere");  
     session.close(); 
    } 
    } 

, когда я пытаюсь запустите этот iam, получив следующую ошибку:

Exception in thread "main" org.hibernate.HibernateException: 
Errors in named queries: findEmployeeName 

может кто-нибудь сказать мне, где я иду не так ?? Я вроде новой для hibernate..so пожалуйста, прости меня за любые очевидные ошибки ....

+0

Ошибки в именованных запросах, поэтому покажите нам свой запрос. –

ответ

1

С HQL, вы должны ссылаться на объекты вместо таблиц , Таким образом, это должно быть Employeenam вместо employee. Если вы задаете параметры для запроса, вы также должны использовать их в запросе, ссылаясь на имена свойств, в соответствии с геттерами/сеттерами (например, empSalary).

Попробуйте написать запрос, как это:

from Employeenam 
where empname = :name 
    and empid = :id 
    and empsalary = :salary 
    and empjob = :empjob 

Кроме того, вы можете рассмотреть вопрос об изменении ваших имен свойств, чтобы соответствовать геттеры/сеттеры. Если свойство называется id, соответствующий геттер/сеттер должен быть getId()/setId(id).

+0

Большое вам спасибо за помощь – Ezhil

1

Вы не правы в своем запросе имени попытаться ниже

@NamedQueries({ 

    @NamedQuery(name="findEmployee",query="from Employeenam e") 
}) 

вместо

@NamedQuery(name="findEmployeeName",query="select * from employee ") 

и внутри FetchData.java ниже одного

Configuration configuration=new Configuration(); 
    configuration.configure("hibernate.cfg.xml"); 
    SessionFactory sfactory=configuration.buildSessionFactory(); 
    Session session=sfactory.openSession(); 
    Query query=session.getNamedQuery("findEmployee"); 

    // here you will get the list of employees 
    List<employee> empList = query.list(); 

    session.close(); 

Обновлено:

Если вам нужно параметризованном именованный запрос, то попробуйте это

@NamedQueries({ 

     @NamedQuery(name="findEmployeeByName",query="from Employeenam e where e.name =:name") 
    }) 

внутри основного метода заменить строку запроса на этот путь

Query query=session.getNamedQuery("findEmployeeByName"); 

query.setString(¨name¨,¨subodh¨);  

     // here you will get the list of employees 
     List<employee> empList = query.list(); 

     session.close(); 
+0

Большое спасибо за помощь. – Ezhil

+1

Если это помогает, не забудьте проголосовать/принять. – subodh

Смежные вопросы