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)