2

コードは次のとおりです。

public Users login(String username) {
        Users user=null;
        try {
            String hql="select user.name,user.password from Users user where user.name=:name";
            Query query = session.createQuery(hql);
            query.setString("name", username);
            user=(Users) query.list().get(0);
        } catch (HibernateException e) {
            e.printStackTrace();
        }
        return user;
    }

エラー:</p>

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.xl.entity.Users
    at com.xl.impl.HouseDaoImpl.login(HouseDaoImpl.java:51)
    at com.xl.biz.HouseBiz.login(HouseBiz.java:25)
    at com.xl.Servlet.UserServlet.doGet(UserServlet.java:25)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)

(翻訳は Google 翻訳による)

4

4 に答える 4

3

Users オブジェクトが必要な場合は、次のようにクエリを編集します。

String hql="from Users user where user.name=:name";

それ以外の場合、結果はオブジェクトの配列になるため、トランスフォーマーを使用するか、単に object[] にキャストする必要があります。

String hql="select user.password from Users user where user.name=:name";
Query query = session.createQuery(hql);
query.setString("name", username);
Object[] result =(Object[]) query.list().get(0);
String password = result[0];
于 2013-09-03T06:13:31.430 に答える
1

この方法でルートエンティティに基づく ResultTransformerが必要です

Query query = session.createQuery(hql);
query.setResultTransformer(RootEntityResultTransformer.INSTANCE);
query.list()

プロジェクション (選択リスト) を使用すると、Object[]typeの結果が生成されます。 はオブジェクトResultTransformerを作成し、UserrawObject[]を correctUserのプロパティにマップします。

于 2013-09-03T05:50:13.227 に答える
1

Usersasの別のコンストラクターを作成しpublic Users(String name, String password)、クエリを次のように変更できます

String hql="select new yourpath.Users(user.name,user.password) from Users user
where user.name=:name";
于 2013-09-03T05:22:08.603 に答える
-1

query.list()を返すのでList、ここでリストの内容を type にキャストしています。User今、例外が言うようにObject can not be cast to User. ユーザーの形式でコンテンツを取得していることを確認してください。

チェックを行うことができます:

 if(query.list() instanceOf User){
        // can cast to user.
 }else{
        // can not cast to User.
 }
于 2013-09-03T05:34:30.250 に答える