0

hibernate で名前付きクエリにアノテーションを使用しています。POJO クラスとメイン クラスの 2 つのクラスがあります。POJO クラスは次のとおりです。

@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

誰かが私が間違っているところを教えてもらえますか?? 私は冬眠するのが初めてなので、明らかなエラーについてはご容赦ください....

4

2 に答える 2

1

名前付きクエリが間違っています。以下を試してください

@NamedQueries({

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

それ以外の

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

そして、あなたのFetchData.java内で1つ下に

    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();
于 2013-02-11T12:09:33.593 に答える
1

HQL では、テーブルではなくエンティティを参照する必要があります。Employeenamしたがって、代わりにする必要がありemployeeます。クエリにパラメーターを設定する場合は、getter/setter (たとえば、) に従ってプロパティ名を参照して、クエリでもそれらを使用する必要がありますempSalary

次のようにクエリを記述してみてください。

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

また、getter/setter と一致するようにプロパティ名を変更することを検討してください。プロパティが呼び出された場合id、対応する getter/setter はgetId()/である必要がありますsetId(id)

于 2013-02-11T12:12:06.773 に答える