2

nullになる可能性のあるItem別のエンティティとの関係で名前が付けられたエンティティがあります。Category2つのエンティティは次のとおりです。

アイテム

@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 + "%");

ただし、がnullの場合は空になりませんcategory(それ以外の場合は機能します)。次のクエリも試してみました。

"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でない場合にのみ、カテゴリ名をチェックするにはどうすればよいですか?

4

2 に答える 2

2

左結合を使用してみてください。

"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)"

JPQLドキュメント

于 2013-03-15T08:36:59.767 に答える
1

上記のパラメータ化された値については、単にnullをチェックしてください。二重引用符で囲まれた場合にのみnullを指定するため、jpaはnullポインタ例外を返しません。したがって、Javaと同様に、文字列としてnullを受け取り、データベースから'%null%'の値を試行します。そのため、空のリストを返します。

于 2013-03-15T07:41:29.147 に答える