使用 HQL 从子表获取记录时不区分大小写的问题



>我有一个父表和一个子表,其中我只从子表中获取 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 转换为相同的大小写(lowercaseuppercase(

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();

最新更新