Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我在整个项目中都使用了LocalDate,现在发现我需要LocalDateTime作为一个功能,该怎么办?_Java_Spring_Spring Boot_Hibernate_Jpa - Fatal编程技术网

Java 我在整个项目中都使用了LocalDate,现在发现我需要LocalDateTime作为一个功能,该怎么办?

Java 我在整个项目中都使用了LocalDate,现在发现我需要LocalDateTime作为一个功能,该怎么办?,java,spring,spring-boot,hibernate,jpa,Java,Spring,Spring Boot,Hibernate,Jpa,我正在创建一个几乎完成的博客。LocalDate的一切都正常,直到有一天,管理员创建了一篇文章,“创建日期”和“修改日期”被添加到保存在MySQL数据库中的文章中。每次用户更新帖子时,“修改”日期都会更改 我想添加的最后一个功能之一是以降序显示管理员发布的最后3篇文章。现在问题来了:如果管理员在同一天一个接一个地添加了3篇文章,那么LocalDate将无法对它们进行排序,因为它无法区分它们,因为它们都具有相同的标准日期,并且没有时间 我尝试修改我的JPA查询以及每个实体字段和方法,以使用Loca

我正在创建一个几乎完成的博客。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();
}
我在某个地方读到“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,您可以修改方法签名,然后在更改签名时提供默认值

还可以使用快捷键和“全部替换”替换任何语句的所有匹配项

  • 正如在评论中所建议的那样,您可以根据记录ID对帖子进行排序,记住每个新帖子的记录ID都是递增的

  • 请注意,您使用的是不推荐的。正如对此方言的评论中所述:

  • 请改用“hibernate.dia方言.storage\u engine=innodb”环境变量或JVM系统属性


    使用这种方言还可能导致日期/时间数据类型的映射问题。例如,请参见。

    方法的代码是什么
    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<>();