>我有一个父表和一个子表,其中我只从子表中获取 1 条记录,但没有获得不区分大小写的匹配记录,这是一个混合字符串。我希望它应该返回 2 条记录。
下面是相同的代码。
//parent Table
@Entity
@Table(name = "employee")
public class Employee implements Serializable {
@Id
@Column(name = "employeeID")
private String employeeID;
@Column(name = "name_first")
private String nameFirst;
@Column(name = "name_last")
private String nameLast;
}
//Child Table
@Entity
@Table(name = "employee_salary")
public class EmployeeSalary implements Serializable {
@EmbeddedId
private EmployeeSalaryPK employeeSalaryPKCompositeKey;
@Column(name = "salaryBracket")
private String salaryBracket;
}
@Embeddable
public class EmployeeSalaryPK implements Serializable {
@Column(name = "employeeID")
private String employeeID;
@Column(name = "salary")
private String salary;
}
employee_salary表中,我有两条记录(如下所示(,但是在使用 HQL 获取它时,只有一条记录带有实际匹配项,但不区分大小写的记录。
员工记录:- ABC 约翰克莱默
employee_salary表记录:-
ABC 100900
aBc 76770
我正在使用简单的 HQL 查询(见下面的代码(,但每当我想获取两条记录时,只获取第一条记录,因为 employeeID 是 abc。
String hqlQuery = " FROM " + Employee.class.getName() + " E WHERE E.employeeID= :EMPLOYEEID";
Session session = entityManager.unwrap(Session.class);
List<?> responseList = session.createQuery(hqlQuery).setParameter("EMPLOYEEID", "ABC").list();
要按大小写无意义的字符串 id 获取所有实体,您必须在WHERE 子句相等运算符的两侧将 id 转换为相同的大小写(lowercase
或uppercase
(
String hqlQuery = " FROM " + Employee.class.getName() + " E WHERE lower(E.employeeID) = :EMPLOYEEID";
Session session = entityManager.unwrap(Session.class);
List<?> responseList = session.createQuery(hqlQuery).setParameter("EMPLOYEEID", "ABC".toLowerCase()).list();