带有枚举的JpaRepository:findAllByOfferState_ACTIVE。 NoSuchElementException异常

时间:2017-09-24 11:29:49

标签: java spring spring-data spring-data-jpa

我希望获得所有优惠(其中)OfferState等于ACTIVE - 是否可以使用只有方法名称的Spring Data,或者我必须使用<td>

@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; } } 不正确吗?当我执行GET时,我的服务方法findAllByOfferState_ACTIVE会抛出异常getAllByPage

我尝试使用Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.util.NoSuchElementException] with root cause而没有它,但仍然是相同的。

2 个答案:

答案 0 :(得分:3)

您可以创建默认界面方法:

public interface OfferRepository extends JpaRepository<Offer, Long> {

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

    List<Offer> findByOfferState(OfferState state);
}

答案 1 :(得分:2)

public interface OfferRepository extends PagingAndSortingRepository<Offer, Long> {

    Page<Offer> findByOfferState(OfferState state,Pageable pageable);

}