У меня есть эта сущность:
@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);
НО ... разве это не перебор ?! Я уверен, что это можно сделать проще.