Запрос на null и ненулевое значение одновременно - PullRequest
0 голосов
/ 28 мая 2020

У меня есть эта сущность:

@Getter
@Setter
@NoArgsConstructor
@ToString
@Accessors(chain = true)
@Entity
@Table(name = "offer_categs")
public class OfferCateg {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Long id;

   private String name;

   @Nullable
   private String image;

   @ManyToOne
   @JoinColumn(name = "parent_id")
   private OfferCateg parent;

   @OneToMany(mappedBy = "parent",
           cascade = CascadeType.REMOVE,
           fetch = FetchType.LAZY,
           orphanRemoval = true)
   private Set<OfferCateg> children; 

}

Я пытаюсь просто создать категории и подкатегории. Моя проблема в том, что при использовании метода ниже parent_id может быть нулевым в случае категории root. Как я могу сделать запрос, чтобы это учесть? Я не могу использовать IS NULL. Должен ли я сделать два запроса и быть осторожным с вызывающим значением parent_id?

@Query(value = "SELECT * FROM offer_categs oc WHERE oc.parent_id = ?1 AND oc.name = ?2", nativeQuery = true)
OfferCateg findByNameAndParent(@Nullable Long parentId, String name);

EDIT

Я изменил запрос на этот, и, похоже, он работает

@Query(value = "SELECT * FROM offer_categs oc WHERE " +
        "(oc.parent_id = ?1 AND oc.name = ?2) OR" +
        "(oc.parent_id IS NULL AND ?1 IS NULL AND oc.name = ?2)",
        nativeQuery = true)
OfferCateg findByNameAndParent(@Nullable Long parentId, String name);

НО ... разве это не перебор ?! Я уверен, что это можно сделать проще.

...