带有枚举的JpaRepository:findAllByOfferState_ACTIVE。NoSuchElementException

use*_*867 3 java spring spring-data spring-data-jpa

我想获得(StateState)等于ACTIVE的所有报价-是否可以仅使用方法名称使用Spring Data还是必须使用@Query

@Repository
public interface OfferRepository extends JpaRepository<Offer, Long> {
    Page<Offer> findAllByOfferState_ACTIVE(Pageable pageable);
}

public enum OfferState {
    ACTIVE, FINISHED
}

@Entity
@Table(name = "OFFERS")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Offer {

    @Id
    @GeneratedValue
    private Long id;

    [...]

    @Enumerated(EnumType.STRING)
    private OfferState offerState;
}

@Service
public class OfferServiceImpl implements OfferService {

    @Autowired
    private OfferRepository offerRepository;

    @Override
    public Offer saveOffer(Offer offer) {
        offer.setOfferState(OfferState.ACTIVE);
        return offerRepository.save(offer);
    }

    @Override
    public Page<Offer> getAllByPage(Pageable pageable) {
        Page<Offer> allByOfferState_active = offerRepository.findAllByOfferStateACTIVE(pageable);
        return allByOfferState_active;
    }
}
Run Code Online (Sandbox Code Playgroud)

findAllByOfferState_ACTIVE不正确的?当我执行GET时,那么在我的服务方法中getAllByPage会抛出一个异常Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.util.NoSuchElementException] with root cause

我尝试使用@Enumerated(EnumType.STRING)和不使用它,但仍然相同。

Cep*_*pr0 6

您可以创建一个默认的接口方法:

public interface OfferRepository extends JpaRepository<Offer, Long> {

    default List<Offer> findAllWhereOfferStateIsActive() {
        return findByOfferState(OfferState.ACTIVE);
    }

    List<Offer> findByOfferState(OfferState state);
}
Run Code Online (Sandbox Code Playgroud)