2016-09-15 5 views
0

定義済みのオブジェクトを取得するために以下のメソッドを使用しました。Hibernate:パラメータを介して文字列値を渡す定義済みオブジェクトを取得する方法

public Patient getUserNameAndPassword(String username, Session session) { 
     Patient patient=(Patient)session.get(Patient.class,username); 
     return patient;  
} 

このメソッドを実行すると、次の例外が生成されました。

org.hibernate.TypeMismatchException: Provided id of the wrong type for class beans.Patient. Expected: class java.lang.Integer, got class java.lang.String 

PatientService.java

public class PatientService { 

    private static PatientDAOInterface patientDAOInterface; 

    public PatientService() { 
     patientDAOInterface = new PatientDAOImpl(); 
    } 

    public Session getSession() { 
     Session session = patientDAOInterface.openCurrentSession(); 
     return session; 
    } 

    public Transaction getTransaction(Session session) { 
     return patientDAOInterface.openTransaction(session); 
    } 

    public Patient getUserNameAndPassword(String username){ 
     Session session = patientDAOInterface.openCurrentSession(); 
     Transaction transaction = null; 

     Patient patient=new Patient(); 
     try{ 
      transaction = patientDAOInterface.openTransaction(session); 
      patient=patientDAOInterface.getUserNameAndPassword(username, session); 
      transaction.commit(); 
     }catch(Exception ex){ 
      ex.printStackTrace(); 
     }finally{ 
      session.close(); 
     }   
     return patient; 
    } 
} 

PatientDAOInterface用の.java

public interface PatientDAOInterface 
{ 
    public Patient getUserNameAndPassword(String username,Session session); 
    public Session openCurrentSession(); 
    public Transaction openTransaction(Session session); 
} 

PatientDAOImpl.java

public class PatientDAOImpl implements PatientDAOInterface { 
    @Override 
    public Patient getUserNameAndPassword(String username, Session session) { 
     Patient patient=(Patient)session.get(Patient.class,username); 
     return patient;  
    }  

    private static final SessionFactoryBuilder sessionFactoryBuilder = SessionFactoryBuilder.getInstance(); 

    @Override 
    public Session openCurrentSession() { 

     Session currentSession = sessionFactoryBuilder.getSessionFactory().openSession(); 
    return currentSession; 
    } 

    @Override 
    public Transaction openTransaction(Session session) { 

     Transaction beginTransaction = session.beginTransaction(); 
     return beginTransaction; 
    } 

} 

私は上記の私の作品を述べました。

実際には、Stringをパラメータに渡してPatientオブジェクトを取得します。 Stringの代わりにIntegerを渡すことに精通しています。しかし、私はこれについて考えていない。

アイデアをお持ちですか?

+0

整数を使用し、患者オブジェクトを取得するために文字列を渡すメソッドを作成したようです。 session.get(Patient.class、username)メソッドがどのように機能するかについて、より正確な情報を提供してください。 –

答えて

3

あなたのユーザー名で患者を検索したいですか?ここであなたは彼のIDで彼を見つけようとしているので、あなたはユーザー名を表す文字列を渡しています。ユーザー名で患者を取得するための独自のクエリ/基準を作成する必要があります。

Criteria criteria = session.createCriteria(Patient.class); 
criteria.add(Restrictions.eq("username", username); 
List<Patient> patients = criteria.list(); 

またはクエリバージョン:このような何か

String hql = "FROM Patient p WHERE p.username = "+username; 
Query query = session.createQuery(hql); 
List patients = query.list(); 
+0

しかし、私は患者リストを患者リストではなくリターンタイプとして欲しい。 – Barrier

+1

同じユーザ名の患者がたくさんいるかもしれないのでリストを取得する必要があります(少なくともHibernateはその知識を持っていないと考えています)。ちょうど 'return patients.get(0)'を実行します。 – Shadov

+1

そのユーザー名に重複がないと仮定すると、patients.get(0)を返すことができます。 –

1

私は、問題への答えを見つけました。

public Patient getUserNameAndPassword(String username, Session session) { 
     Query query=session.createQuery("from Patient where user_name= :username"); 
     query.setParameter("username", username); 
     List list = query.list(); 
     Patient patient=(Patient) list.get(0); 
     return patient; 
} 

これは私のために働いています。

ありがとうございました。

関連する問題