Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate:如何让预定义对象通过参数传递字符串值_Java_Hibernate - Fatal编程技术网

Java Hibernate:如何让预定义对象通过参数传递字符串值

Java Hibernate:如何让预定义对象通过参数传递字符串值,java,hibernate,Java,Hibernate,我使用以下方法获得预定义对象 public Patient getUserNameAndPassword(String username, Session session) { Patient patient=(Patient)session.get(Patient.class,username); return patient; } 执行此方法后,生成以下异常 org.hibernate.TypeMismatchException: Provid

我使用以下方法获得预定义对象

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; 
    }
}
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;
    }

}
PatientDAOInterface.java

public interface PatientDAOInterface 
{
    public Patient getUserNameAndPassword(String username,Session session);
    public Session openCurrentSession();
    public Transaction openTransaction(Session session);
}
PatientDAOImpl.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; 
    }
}
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;
    }

}
我在上面提到了我的作品

实际上,我想通过参数传递一个字符串并获得一个Patient对象。 我熟悉传递一个
整数
,而不是
字符串
。但我对此一无所知


你有什么想法吗

您想通过用户名查找患者吗?因为在这里,您试图通过他的ID找到他,并传递一个表示用户名的字符串。您应该编写自己的查询/条件,以便通过用户名获取患者。大概是这样的:

Criteria=session.createCriteria(Patient.class);
标准.添加(限制.eq(“用户名”),用户名);
列出患者=标准。列表();
或查询版本:

String hql=“来自患者p,其中p.username=“+username;
Query=session.createQuery(hql);
List patients=query.List();

您想通过用户名查找患者吗?因为在这里,您试图通过他的ID查找患者,并传递一个表示用户名的字符串。您应该编写自己的查询/条件,以便通过用户名查找患者。类似于:

Criteria=session.createCriteria(Patient.class);
标准.添加(限制.eq(“用户名”),用户名);
列出患者=标准。列表();
或查询版本:

String hql=“来自患者p,其中p.username=“+username;
Query=session.createQuery(hql);
List patients=query.List();

我找到了这个问题的答案

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;
}
这是为我工作


谢谢。

我找到了这个问题的答案

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;
}
这是为我工作


谢谢。

您似乎创建了一个使用整数并传递字符串的方法来获取患者对象。请提供有关会话.get(Patient.class,username)的更精确信息方法有效。似乎您已经创建了一个使用整数并传递字符串的方法来获取Patient对象。请提供有关session.get(Patient.class,username)的更精确信息方法起作用。好的。但我希望患者对象作为返回类型,而不是患者列表。需要检索列表,因为可能有很多患者使用相同的用户名(至少Hibernate认为是这样,它不知道)。只需执行
返回患者。获取(0)
。假设该用户名没有重复项,您可以返回患者。get(0)Ok。但我希望患者对象作为返回类型,而不是患者列表。需要检索列表,因为可能有很多患者使用相同的用户名(至少Hibernate认为是这样,它不知道)。只需执行
返回患者。get(0)
。假设该用户名没有重复项,您可以返回患者。获取(0)