java - 我在整个项目中使用了 LocalDate,现在我需要 LocalDateTime 来实现功能,该怎么办?
问题描述
我正在创建一个几乎完成的博客。LocalDate 一切正常,直到管理员创建帖子时,“创建日期”和“修改日期”被添加到保存在 MySQL 数据库中的帖子中。每次用户更新帖子时,“修改”日期都会更改。
我想添加的最后一个功能是显示管理员按降序发布的最后 3 个帖子。现在问题来了:如果管理员在同一天一个接一个地添加 3 个帖子,则 LocalDate 无法对它们进行排序,因为它无法区分它们,因为它们都有相同的标准日期,并且时间不存在。
我尝试修改我的 JPA 查询以及每个实体字段和方法以使用 LocalDateTime 而不是 LocalDate,但随后发生了这种情况:
@Repository
public interface PostRepository extends CrudRepository<Post, Long> {
List<Post> findAllByCreatedAtBetween(LocalDateTime start, LocalDateTime end);
List<Post> findAllByOrderByCreatedAtDesc();
}
java.lang.IllegalArgumentException: Parameter value [2020-09-01T12:27:19.341] did not match expected type [java.time.LocalDate (n/a)]
我在某处读到“中间”不适用于 LocalDateTime,现在我的整个项目都坏了。
我很困惑,也很恼火,我这么晚才发现 LocalDate 在灵活性方面是错误的选择。请帮助我了解我现在有哪些选项可以使该功能正常工作。任何帮助将不胜感激!
邮政类:
@Entity
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private LocalDateTime createdAt;
private LocalDateTime modifiedAt;
@NotBlank(message = "Post Title is required")
private String title;
@Basic(fetch = FetchType.LAZY)
private String image;
@Column(length = 65535,columnDefinition="Text")
@NotBlank(message = "Post Content is required")
private String content;
@OneToMany(cascade = CascadeType.ALL)
private List<Comment> comments = new ArrayList<>();
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "POST_TAG", joinColumns = {@JoinColumn(name = "post_id")},
inverseJoinColumns = {@JoinColumn(name = "tag_id")})
private Set<Tag> tags = new HashSet<>();
对于任何在同一问题上苦苦挣扎的人,这次更容易,而不是进行破坏整个代码的修改以仅按 ID 对实体进行排序。但是下一次从一开始就选择一个为您提供更多灵活性的类(如 LocalDateTime),因为您永远不知道接下来需要实现什么。
解决方案
推荐阅读
- javascript - 如何在 sigmajs 中使用 webgl 渲染器创建带边框的节点
- c# - 在控制台应用程序中使用 while 循环对数字求和时出现意外结果
- angular - Angular 材质淡入淡出过渡
- r - R Shiny 服务器 Gzip 压缩
- python - 覆盖`from my_module import ...`
- c# - 绑定到数组的特定元素不会更新
- keras - 如何制作这个 1 单元 LSTM 网络?
- php - 如何在 Symfony 4 中创建登录页面而不出现错误“InvalidConfigurationException”?
- firebase - Ionic 3 - 如何将视频文件从画廊上传到 Firebase 存储
- javascript - Json:json数组的总和值