Jpa 具有空值关系中目标实体属性的类JPQL表达式
我有一个名为Jpa 具有空值关系中目标实体属性的类JPQL表达式,jpa,eclipselink,jpql,Jpa,Eclipselink,Jpql,我有一个名为Item的实体,该实体与另一个实体Category有关系,该实体可以为空。这两个实体如下: 项目 @Entity public class Item { @Id private String id; private String name; private String code; @ManyToOne private Category category; } 类别 @Entity public class Categor
Item
的实体,该实体与另一个实体Category
有关系,该实体可以为空。这两个实体如下:
项目
@Entity
public class Item {
@Id
private String id;
private String name;
private String code;
@ManyToOne
private Category category;
}
类别
@Entity
public class Category {
@Id
private String id;
private String name;
}
现在,我必须选择类似于搜索词的项目具有名称、代码或类别名称,我尝试了以下查询:
"SELECT item FROM Item item "
+ "WHERE item.code LIKE :searchTerm OR item.name LIKE :searchTerm "
+ "OR item.category.name LIKE :searchTerm"
searchTerm
是使用
query.setParameter("searchTerm", "%" + searchTerm + "%");
但如果category
为null,则结果不会为空(否则有效)。我还尝试了以下查询
"SELECT item FROM Item item "
+ "WHERE item.code LIKE :searchTerm OR item.name LIKE :searchTerm "
+ "OR (item.category IS NOT NULL AND item.category.name LIKE :searchTerm)"
这也没用。如何使其仅在类别不为null时检查类别名称?只需将上述参数化值检查为null即可。jpa不会返回null指针异常,因为我们只在双引号内给出null。因此,与java一样,它将null作为字符串,并从数据库中尝试“%null%”的值。因此,它返回空列表。尝试使用左连接:
"SELECT item FROM Item item LEFT JOIN item.category cat"
+ "WHERE item.code LIKE :searchTerm OR item.name LIKE :searchTerm "
+ "OR (cat.categoryID IS NOT NULL AND cat.name LIKE :searchTerm)"
谢谢你抽出时间。参数不为null。它是
item.category
,具有空值,因此在比较item.category.name
的值时会导致意外结果。你误解了这个问题。我给的标题可能就是原因。