Spring 枚举的数据方法名称
Spring data method name for enum
有什么方法可以将枚举值放入方法名称中并使用 Spring 数据吗?它可以通过 @Query
annotaion 来完成,像这样:
@Query("select t from Ticket as t where t.status != desk.enums.TicketStatus.CLOSED")
List<Ticket> findActiveTickets();
其中状态是枚举。但是只使用方法名怎么办呢?使用 List<Ticket> findByStatusIsNotClosed();
之类的东西会导致 No property isNotClosed found for type TicketStatus
.
那么不用@Query
怎么办呢?
目前 Spring Data JPA 无法做到这一点。方法名称仅使用 属性 遍历进行转换,因此会出现错误。您可以查看 specifications,但这将包括在您的查找方法中添加另一个方法调用。
如果您使用的是 Java 8,则可以在接口中使用 default
关键字来委托给更通用的方法。
default List<Ticket> findActiveTickets() {
return findByTicketStatusNotIn(ImmutableList.of(TicketStatus.CLOSED));
}
List<Ticket> findByTicketStatusNotIn(List<TicketStatus> status);
有什么方法可以将枚举值放入方法名称中并使用 Spring 数据吗?它可以通过 @Query
annotaion 来完成,像这样:
@Query("select t from Ticket as t where t.status != desk.enums.TicketStatus.CLOSED")
List<Ticket> findActiveTickets();
其中状态是枚举。但是只使用方法名怎么办呢?使用 List<Ticket> findByStatusIsNotClosed();
之类的东西会导致 No property isNotClosed found for type TicketStatus
.
那么不用@Query
怎么办呢?
目前 Spring Data JPA 无法做到这一点。方法名称仅使用 属性 遍历进行转换,因此会出现错误。您可以查看 specifications,但这将包括在您的查找方法中添加另一个方法调用。
如果您使用的是 Java 8,则可以在接口中使用 default
关键字来委托给更通用的方法。
default List<Ticket> findActiveTickets() {
return findByTicketStatusNotIn(ImmutableList.of(TicketStatus.CLOSED));
}
List<Ticket> findByTicketStatusNotIn(List<TicketStatus> status);