如何在hibernate中从表中选择多个记录

时间:2015-04-12 03:28:20

标签: mysql spring hibernate spring-mvc

我试图从网页表单中获取多个值,并使用hibernate查询从数据库中搜索值并检索结果并将其显示在新页面中。

enter image description here

我需要获取这些文本字段,即使任何字段为空,我需要通过控制器在数据库中运行搜索查询并在新页面中返回结果集。我试图将结果存储在ArrayList的数组列表中,但它没有用。有人可以帮帮我吗?

我正在尝试从控制器中的网页获取文本值:

String lastname = request.getParameter("lastname");
String firstname = request.getParameter("firstname");
String gender = request.getParameter("gender");
String speciality = request.getParameter("speciality");
String keyword = request.getParameter("keyword");

我有Doctor's table,其中存储了所有这些文本字段。姓氏,名字,性别,专业。我有一个名为doctor的课程,该课程链接到数据库。

@Entity 
@Table(name="DOCTOR_DETAILS")
public class Doctor {

  @Id
  @Column (nullable=false)
  private int npi;
  @Column (nullable=false)
  private String firstName;
  @Column (nullable=false)
  private String lastName;
  @Column (nullable=false)
  private String gender;
  @Column (nullable=false)
  private String speciality;
  public int getNpi() {
    return npi;
  }
  public void setNpi(int npi) {
    this.npi = npi;
  }
  public String getFirstName() {
    return firstName;
  }
  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }
  public String getLastName() {
    return lastName;
  }
  public void setLastName(String lastName) {
    this.lastName = lastName;
  }

  public String getGender() {
    return gender;
  }
  public void setGender(String gender) {
    this.gender = gender;
  }

  public String getSpeciality() {
    return speciality;
  }
  public void setSpeciality(String speciality) {
    this.speciality = speciality;
  } 

}

我需要运行一个select查询来从表中检索记录。即使4个字段中的任何一个为空,查询也应检索记录。

try {
  begin();
  ArrayList <String> cntList = new ArrayList<String>();
  Query q = getSession().createQuery("select * from   
  doctor where lastName = :lastName or firstName =:firstName or    
  gender=:gender or speciality = :speciality");
  q.setString("username", username);
  cntList = (ArrayList<String>) q.list();
  commit();
  return cntList;
}    

我尝试了以下使用Hibernate标准的方法,但是我收到了一个错误。我在哪里出错了?。

我在控制器中写下了以下代码:

enter image description here

在我的DAO类中连接到数据库的部分。

enter image description here

但我收到以下错误:

enter image description here

你能帮帮我吗?

代码工作正常并返回结果列表。我尝试按照教程点网站中提供的步骤进行操作,但是我收到了强制转换错误。 “类型不匹配:无法从int转换为医生。

要求我改变的类型不匹配 医生医生= iterator.next(); 至 int doctor = iterator.next();

这很奇怪,因为我无法从Doctor类中检索值。

enter image description here

1 个答案:

答案 0 :(得分:2)

您应该使用带有析取的Hibernate条件查询。它被设计用于处理这种情况。试试这段代码

    public List<Doctor> getSearchResult(String firstName, String lastName, String gender, String speciality, Session session) {
      Criteria cr = session.createCriteria(Doctor.class);
      Disjunction or = Restrictions.disjunction();

      if (firstName != null)
        or.add(Restrictions.ilike("firstName", firstName+"%"));
      if (lastName != null)
        or.add(Restrictions.ilike("lastName", "%"+lastName));
      if (gender != null)
        or.add(Restrictions.eq("gender", gender));
      if (speciality != null)
        or.add(Restrictions.ilike("speciality", "%"+speciality+"%"));

      cr.add(or);

      return (List<Doctor>) cr.list();
    }

您可以了解Hibernate Criteria查询here