【问题标题】:Not able to get the row if there is null value in one column hibernate hql如果一列中存在空值,则无法获取该行休眠 hql
【发布时间】:2015-05-13 09:34:19
【问题描述】:

我在搜索操作中遇到了困难。如果一行的列中有任何null 值,则该行不会出现。我尝试在hql 中使用is not null,但我无法获得这些值。我写了hql这样的查询。它什么也没返回。我无法理解它是如何工作的。请告诉我这个的解决方案。我正在使用mysql

session.createQuery("FROM Employee e WHERE (e.company is not null and e.company.name = :p1) or e.name = :p1").setParameter("p1", str)

我的@Entity 课程如下:

@Entity
public class Employee implements Serializable {

    @Id
    @GeneratedValue
    private Long id;
    private String name;
    private float salary;

    @OneToOne(cascade = CascadeType.ALL)
    private Company company;

@Entity
public class Company implements Serializable {

    @Id
    @GeneratedValue
    private Long id;
    private String name;
    private String Location;

【问题讨论】:

标签: java mysql hibernate orm hql


【解决方案1】:

试试这个

session.createQuery("FROM Employee e left join e.company c WHERE c.name = :p1 or e.name = :p1").setParameter("p1", "uday11")

当您在查询中使用 e.company 时,它会被转换为 inner join,这就是它无法按预期工作的原因。

【讨论】:

  • ..非常感谢它的工作,但结果没有转换为 Employee Object。可能是它的返回.Object 类型。
  • 你怎么称呼它?这应该工作:List<Employee> result = (List<Employee>)session.createQuery(<the query>).setParameter(...).list();
  • 我正在这样做List<Employee> e = session.createQuery("FROM Employee e left join e.company c WHERE c.name = :p1 or e.name = :p1").setParameter("p1", "uday11").list();
  • 您需要将结果转换为List<Employee>,因为query.list() 返回一个通用列表。
  • 转换了结果,但它仍然给出类转换异常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 2017-12-27
  • 2012-07-07
  • 1970-01-01
相关资源
最近更新 更多