我正在尝试从网页表单中获取多个值并使用 hibernate 查询从数据库中搜索值并检索结果并将其显示在新页面中。
我需要获取这些文本字段,即使任何字段为空,我也需要通过 Controller 在数据库中运行搜索查询并在新页面中返回结果集。我试图将结果存储在 ArrayList 的数组列表中,但它没有用。谁能帮帮我?
我正在尝试从 Controller 中的网页获取文本值:
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 的类,它链接到数据库。
@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 条件的方法,但出现错误。我哪里出错了吗?
我在我的 Controller 中写了下面的代码:
下面是连接到数据库的 DAO 类中的部分。
但我遇到以下错误:
你能帮帮我吗?
代码运行良好并返回了结果列表。我尝试按照教程点站点中提供的步骤进行操作,但出现转换错误。 “类型不匹配:无法从 int 转换为 doctor。
类型不匹配要求我更改 医生 doctor = iterator.next(); 到 int doctor = iterator.next();
这有点奇怪,因为我无法从 Doctor 类中检索值。
最佳答案
您应该使用带析取的 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 .
关于mysql - 如何从 hibernate 表中选择多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29585634/