我的实体与第二个实体有一个可空的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'不匹配,则不会返回它们。有什么建议?我只是以错误的方式处理这个问题吗?