hsa*_*dik 0 spring spring-data-jpa
我有一个包含 field 的实体date。
@Entity
@Table(name="messages", schema = "users")
...
public class Message {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "author")
private String author;
@Column(name = "tags")
private String tags;
@Column(name = "message_date")
private LocalDate date;
@Override
public String toString() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
@Repository
public interface MessageRepository extends JpaRepository<Message, Long> {
Message findByMessageId(Long id);
}
Run Code Online (Sandbox Code Playgroud)
我正在将 Spring Data JPA 与存储库一起使用。我想从数据库获取过去 3 天的所有消息(字段date)。我怎样才能用 Spring JPA 做到这一点?
@Query(...?)
List<Message> findBy...?
Run Code Online (Sandbox Code Playgroud)
我建议将逻辑与实际查询分开。服务可以处理所有中间事物,例如:
@Service
public class MessageService {
private final MessageRepository repository;
@Autowired
public MessageService(MessageRepository repository) {
this.repository = repository;
}
List<Message> getLastThreeDays() {
// subtract 3 days from today
LocalDate threeDaysAgoDate = LocalDate.now().minusDays(3);
return this.repository.findAllWithDateAfter(threeDaysAgoDate);
}
}
Run Code Online (Sandbox Code Playgroud)
并且您的存储库保持干净整洁:
@Repository
public interface MessageRepository extends JpaRepository<Message, Long> {
Optional<Message> findByMessageId(Long id);
@Query("select m from Message m where date >= :threeDaysAgoDate")
List<Message> findAllWithDateAfter(@Param("threeDaysAgoDate") LocalDate threeDaysAgoDate);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5440 次 |
| 最近记录: |