Java 我在整个项目中都使用了LocalDate,现在发现我需要LocalDateTime作为一个功能,该怎么办?
我正在创建一个几乎完成的博客。LocalDate的一切都正常,直到有一天,管理员创建了一篇文章,“创建日期”和“修改日期”被添加到保存在MySQL数据库中的文章中。每次用户更新帖子时,“修改”日期都会更改 我想添加的最后一个功能之一是以降序显示管理员发布的最后3篇文章。现在问题来了:如果管理员在同一天一个接一个地添加了3篇文章,那么LocalDate将无法对它们进行排序,因为它无法区分它们,因为它们都具有相同的标准日期,并且没有时间 我尝试修改我的JPA查询以及每个实体字段和方法,以使用LocalDateTime而不是LocalDate,但后来出现了这种情况:Java 我在整个项目中都使用了LocalDate,现在发现我需要LocalDateTime作为一个功能,该怎么办?,java,spring,spring-boot,hibernate,jpa,Java,Spring,Spring Boot,Hibernate,Jpa,我正在创建一个几乎完成的博客。LocalDate的一切都正常,直到有一天,管理员创建了一篇文章,“创建日期”和“修改日期”被添加到保存在MySQL数据库中的文章中。每次用户更新帖子时,“修改”日期都会更改 我想添加的最后一个功能之一是以降序显示管理员发布的最后3篇文章。现在问题来了:如果管理员在同一天一个接一个地添加了3篇文章,那么LocalDate将无法对它们进行排序,因为它无法区分它们,因为它们都具有相同的标准日期,并且没有时间 我尝试修改我的JPA查询以及每个实体字段和方法,以使用Loca
@Repository
public interface PostRepository extends CrudRepository<Post, Long> {
List<Post> findAllByCreatedAtBetween(LocalDateTime start, LocalDateTime end);
List<Post> findAllByOrderByCreatedAtDesc();
}
我在某个地方读到“between”与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<>();
@实体
公营职位{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
私有LocalDateTime-createdAt;
私有LocalDateTime-modifiedAt;
@NotBlank(message=“需要文章标题”)
私有字符串标题;
@基本(fetch=FetchType.LAZY)
私有字符串图像;
@列(长度=65535,columnDefinition=“Text”)
@NotBlank(message=“需要发布内容”)
私有字符串内容;
@OneToMany(级联=级联类型.ALL)
私有列表注释=新建ArrayList();
@多个(级联=级联类型.ALL)
@JoinTable(name=“POST\u TAG”,joinColumns={@JoinColumn(name=“POST\u id”)},
inverseJoinColumns={@JoinColumn(name=“tag_id”)})
private Set tags=new HashSet();
对于任何与同一问题斗争的人来说,这一次更容易,而不是进行破坏整个代码的修改,只按ID对实体进行排序。但下次选择一个提供更多灵活性的类(如LocalDateTime)从一开始,因为您永远不知道需要实现什么。如果您使用Intellij作为ide,您可以修改方法签名,然后在更改签名时提供默认值 还可以使用快捷键和“全部替换”替换任何语句的所有匹配项
使用这种方言还可能导致日期/时间数据类型的映射问题。例如,请参见。方法的代码是什么
findallbycreatedattween
?为什么您不能按记录ID对帖子进行排序,因为每个新帖子的记录ID都会递增。@deaar这只是一个jpa查询,我使用的是中间词和2段米。就是这样,没有其他代码。对应的数据库表列的类型是什么?是日期还是日期时间或其他什么?可能很重要…你能显示Post
类的代码吗?我猜其中某个地方有LocalDate
。否则你必须找出LocalDate
在哪里sage来自。您能给我一个例子吗?ctrl+shift+r==>将用您打算放在所有文件中的内容替换语句的出现。ctrl+F6将允许您更改方法签名
@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<>();