【问题标题】:How to select multiple records from table in hibernate如何在休眠中从表中选择多条记录
【发布时间】:2015-06-17 14:25:41
【问题描述】:

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

我需要获取这些文本字段,即使任何字段为空,我也需要通过控制器在数据库中运行搜索查询并在新页面中返回一组结果。我试图将结果存储在 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");

我有存储所有这些文本字段的医生表。姓氏,名字,性别,专业。我有一个名为医生的类,它链接到数据库。

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

}

我需要运行一个选择查询来从表中检索记录。即使 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 标准的方法,但出现错误。我哪里出错了?

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

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

但我遇到以下错误:

你能帮帮我吗?

代码运行良好并返回了结果列表。我尝试按照教程点站点中提供的步骤进行操作,但出现转换错误。 "类型不匹配:无法从 int 转换为医生。

类型不匹配要求我更改 医生医生 = iterator.next(); 到 int 医生 = iterator.next();

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

【问题讨论】:

  • "即使 4 个字段中的任何一个为空,查询也应该检索记录。"那你想带什么唱片呢?所有可用的医生?

标签: mysql spring hibernate spring-mvc


【解决方案1】:

您应该使用带有析取的 Hibernate 条件查询。它旨在处理这种情况。试试这个代码sn-p

    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

【讨论】:

  • 我试过 Hibernate Criteria 查询。但我得到了错误。我已经指定了我的代码和错误以及我的问题。你能帮帮我吗。
  • 似乎是命名不匹配。您确定您使用的是您在问题中发布的 Doctor POJO 吗?尝试仔细检查拼写。还要检查您的DOCTOR_DETAILS 表中是否真的有一列名为speciality
  • 使用泛型。 Iterator&lt;Doctor&gt; it = docList.iterator()这里不用投了。
  • 您使用的是哪个版本的 JDK?确保您使用import java.util.Iterator;。自动导入导入的其他包中可能存在迭代器并导致此类问题。如果所有这些都可以,那么发布“HomeController”包含的所有内容。我在这里没有看到迭代器有什么问题。
  • 我以为您正在尝试获取与您的搜索条件匹配的所有结果。如果您想获得包含所有搜索条件的结果,则必须使用连词。只需忽略 Disjunction 并将您的 Restrictions 直接添加到条件中。这样就可以了。我使用了 Disjunction ,因为您在问题中发布的查询是 ORing 条件。你需要 AND 在这里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-17
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
相关资源
最近更新 更多