2016-07-02 12 views
0

データベースアクセスオブジェクト(DAO)クラス、エンティティクラス、およびテーブルスクリプトを作成しましたが、エンティティにマップできないエラーが発生しています。
私はhibernateフレームワークを使用しており、接続はデータベースと正しく作成されていますが、まだエラーが発生しています。以下のコードを確認して、できるだけ手助けしてください。すべてのファイルは以下のとおりです。java.lang.ClassCastException:[Ljava.lang.Object; rmc.entity.UserEntityにキャストできません

表スクリプト

DROP TABLE rmc_user; 
CREATE TABLE rmc_user(
user_id VARCHAR(50) NOT NULL, 
user_name VARCHAR(20) NOT NULL, 
user_email VARCHAR(50) NOT NULL, 
user_password VARCHAR(20), 
CONSTRAINT rmc_user_user_id_pk PRIMARY KEY (user_id), 
CONSTRAINT rmc_user_user_email_un UNIQUE (user_email) 
); 

INSERT INTO rmc_user VALUES ('101','yashik','[email protected]','gulati123'); 

SELECT * FROM rmc_user; 

DAOクラス

package rmc.dao; 

import java.util.List; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.query.Query; 
import rmc.bean.User; 
import rmc.entity.UserEntity; 
import rmc.resources.HibernateUtility; 

public class LoginDAOImpl implements LoginDAO { 

    @SuppressWarnings("deprecation") 
    public User getUserDetails(String userName, String password) { 
     SessionFactory sessionFactory = HibernateUtility.createSessionFactory(); 
     Session session = null; 
     User u1 = null; 
     session = sessionFactory.openSession(); 
     session.beginTransaction(); 
     System.out.println("begin trx"); 
     Query q1 = session 
       .createNativeQuery("select * from rmc_user where user_name=?"); 
     System.out.println("begin trx"); 
     q1.setParameter(0, userName); 
     System.out.println("begin trx"); 
     @SuppressWarnings("unchecked") 
     List<UserEntity> l1 = q1.list(); 
     System.out.println("begin trx"); 
     System.out.println("size is"+l1.size()); 
     if (l1.size() == 0) { 
      System.out.println("no Such user Exist"); 
     } else if (!(l1.get(0).getPassword().equals(password))) { 
      System.out.println("Invalid Password"); 
     } 
     System.out.println("begin trx"); 
     u1 = new User(); 
     u1.setEmail(l1.get(0).getEmail()); 
     u1.setPassword(l1.get(0).getPassword()); 
     u1.setUserId(l1.get(0).getUserId()); 
     u1.setUserName(l1.get(0).getUserName()); 
     session.getTransaction().commit(); 
     if (session != null) { 
      session.close(); 
     } 
     return u1; 
    } 
} 

エンティティークラス

package rmc.entity; 
@Id 
@Column(name="user_id") 
private String userId; 
@Column(name="user_name") 
private String userName; 
@Column(name="user_email") 
private String email; 
@Column(name="user_password") 
private String password; 

//getter and setter 
} 

エラーメッセージ

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to rmc.entity.UserEntity 
at rmc.dao.LoginDAOImpl.getUserDetails(LoginDAOImpl.java:32) 
at rmc.test.UserInterface.main(UserInterface.java:9) 
[オブジェクト:

は、このクエリを実行すると、問題は、おそらくそれは、SQLクエリだから、q1.list()のリターンリストは、このフォーマットを持つことになり、ここで

Query q1 = session.createNativeQuery("select * from rmc_user where user_name=?"); 

に位置

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration SYSTEM 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 
<session-factory> 
    <property name="hibernate.dialect"> 
     org.hibernate.dialect.MySQLDialect 
    </property> 
    <property name="hibernate.connection.driver_class"> 
     com.mysql.jdbc.Driver 
    </property> 

    <!-- Assume test is the database name --> 
    <property name="hibernate.connection.url"> 
     jdbc:mysql://localhost:3306/rmc 
    </property> 
    <property name="hibernate.connection.username"> 
     ****** 
    </property> 
    <property name="hibernate.connection.password"> 
     ****** 
    </property> 


    <!-- List of XML mapping files --> 
    <mapping class="rmc.entity.UserEntity"/> 

</session-factory> 

+0

例外は、このライン上で発生した: 'リスト L1 = q1.list();'? – niceman

+0

この行にエラーはありません '} else if(!(l1.get(0).getPassword()。equals(password))){' – Yashik

答えて

0

を更新しました] {row1col1、row1col2、row1、col3、row2col1、...}それは列を展開し、エンティティ(UserEntity)に行をマップしません。

これは、HQLでもJPQLでもないため、ネイティブSQLであり、SQLはエンティティについて認識していません。

あなたは代わりにこれを行う必要があります。これはHQLとq1.list()のリターンリストは、現在の形式になりますので、このHibernateはエンティティへのすべての行をマップすると

Query q1=session.createQuery("select * from UserEntity where user_name=?"); 

です:UserEntity [] {entity1、entity2を,. ..}。

私はあなたの問題を解決することを願っています。

+0

返信ありがとうございました。あなたが見てみることができますか? 'org.hibernate.hql.internal.ast.QuerySyntaxException:UserEntityがマッピングされていない[?UserEntity FROM Uここu.userName =] ' – Yashik

+0

また、編集された 'クエリQ1 =セッション \t \t \t \t .createQuery( "FROM UserEntity uどこu.userName =?"); \t \t q1.setParameter(0、userName); \t \tリスト l1 = q1.list(); ' – Yashik

+0

@Yashik @ Yashikはあなたがorgの' @ Entity'アノテーションを使用する機会を得ていますか?パッケージを休止する?あなたはjavax.persistanceパッケージから来るものを使うべきです。[this](http://stackoverflow.com/a/8524836/2397162) – niceman

1

あなたの結果の行がUserEntityと互換性がある場合、以下の変更があなたの問題を解決する可能性があります:

Query q1 = session 
     .createNativeQuery("select * from rmc_user where user_name=?", UserEntity.class); 
関連する問題