Как я могу использовать методы запроса JPA для возврата условия OR с NULL?

#jpa #spring-data-jpa

#jpa #spring-data-jpa

Вопрос:

Я пытаюсь создать запрос, который либо соответствует всем строкам, которые равны tier или равны нулю. Используя методы запроса, как описано в Spring JPA Docs. Приведенная ниже реализация по умолчанию работает, если я просто передаю tier :-

 @Entity
@Table(name = "tier")
class UuTier {
    Long id;
    Long tierId;
}

@Entity
@Table(name = "user")
class User {
    @OneToOne
    @JoinColumn(name="tier_id")
    UuTier uuTier;
    // Other Relationships
}


public interface UserRepository extends Repository<User, Long> {
  List<User> findByTier_Id(@Param("tier")Long tier);
}
  

Что мне нужно, так это что-то вроде этого, которое выдает ошибку «Не найдено свойство null для типа User». Могу ли я достичь этого запроса с помощью методов запроса?:-

 public interface UserRepository extends Repository<User, Long> {
  List<User> findByTierOrNull_Id(@Param("tier")String tier);
}
  

Комментарии:

1. Как насчет findByTierOrTierIsNull_Id ?

Ответ №1:

Продолжение от одного из респондентов (который по какой-то причине удалил свой пост) — я заставил это работать!!

 @Query("SELECT entity FROM User entity LEFT JOIN UuTier uuTier ON entity.uuTier.tier = uuTier.tier"
          " WHERE entity.uuTier.tier = :tier OR entity.uuTier.tier IS NULL")
public List<User> findByTierOrNull_Id(@Param("tier") Long tier);