JPA JPQL查询可选的ManyToOne属性

时间:2014-09-26 17:51:29

标签: java sql jpa

我的实体与第二个实体有一个可空的ManyToOne关联。我正在使用单个搜索框构建UI,并且我想要包含搜索匹配父项或子实体的字段的行。

现在这看起来像是:

@Entity
public class RequestForm {
  ...

  @ManyToOne 
  @JoinColumn(name = "COMPANY_ID", nullable = true, updatable = false, insertable = false)
  private Company company

  ...
}

我正在这样查询:

    Query q = em.createQuery("select req from RequestForm req where 
                + "( "
                + "(req.id like :query) "
                + "or (upper(req.name) like :query) "
                + "or (req.companyId is not null and upper(req.company.companyName) like :query) "                  
                + ")", RequestForm.class);
       q.setParameter("query", "%" + query.toUpperCase() + "%");

当我在查询中包含req.company.companyName时,JPA以仅返回ManyToOne存在的行的方式构建SQL。当用户搜索示例'Sam'时,我想返回RequestForm.name包含Sam或RequestForm.Company.name包含Sam的行。我得到的只是RequestForm.company.name包含'Sam'的行。如果RequestForm.name包含'Sam'但没有公司,或者Company.name与'Sam'不匹配,则不会返回它们。有什么建议?我只是以错误的方式处理这个问题吗?

0 个答案:

没有答案