Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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 我必须在spring数据中避免使用本机sql吗?_Java_Sql_Hibernate_Spring Data_Spring Data Jpa - Fatal编程技术网

Java 我必须在spring数据中避免使用本机sql吗?

Java 我必须在spring数据中避免使用本机sql吗?,java,sql,hibernate,spring-data,spring-data-jpa,Java,Sql,Hibernate,Spring Data,Spring Data Jpa,我有一个存储库: public interface MessageRepository extends JpaRepository<Message, Long> { Message findById(long id); @Query(value = "SELECT * from message where sent = false and expire <= current_timestamp ", nativeQuery = true) List&l

我有一个存储库:

public interface MessageRepository extends JpaRepository<Message, Long> {
    Message findById(long id);

    @Query(value = "SELECT * from message where sent = false and expire <= current_timestamp ", nativeQuery = true)
    List<Message> findAllReadyMessages();
}

好处和坏处是什么?

第一种选择更具可读性和安全性,因为你不会意外地错过一个错误的日期

第二个选项没有解释您试图实现的目标,允许您自己指定参数。从逻辑上讲,它与第一个查询不同


我想,除非你在一个官僚的环境中工作,这个环境给了你一套你需要遵守的愚蠢规则,否则你不必避免任何能给你一个好的、干净的解决方案的事情。

第一种选择更具可读性和安全性,因为你不会意外地错过一个错误的日期

第二个选项没有解释您试图实现的目标,允许您自己指定参数。从逻辑上讲,它与第一个查询不同


我想你不必避免任何能给你一个好的、干净的解决方案的事情,除非你在一个官僚的环境中工作,这个环境给了你一套你需要遵守的愚蠢的规则。

如果你不想每次调用你的存储库方法时都传递
日期
对象,你可以简单地使用一个预定义的
JPA
方法

试试这个

public interface MessageRepository extends JpaRepository<Message, Long> {

    @Query(value = "SELECT m from Message m where m.sent = false and m.expire <= CURRENT_TIMESTAMP ")
    List<Message> findAllReadyMessages();

}
public interface MessageRepository扩展了JpaRepository{

@Query(value=“SELECT m from Message m,其中m.sent=false和m.expire如果您不想在每次调用存储库方法时传递
Date
对象,您只需使用预定义的
JPA
方法即可

试试这个

public interface MessageRepository extends JpaRepository<Message, Long> {

    @Query(value = "SELECT m from Message m where m.sent = false and m.expire <= CURRENT_TIMESTAMP ")
    List<Message> findAllReadyMessages();

}
public interface MessageRepository扩展了JpaRepository{

@查询(值=”从消息m中选择m,其中m.sent=false,m.expire无法回答本机查询和传递日期之间哪个更好,但我会传递一个
Date
对象。有一次我在一个项目中工作,其中数据库位于与java应用程序所在服务器时区不同的服务器上。因此我们无法使用
current\uestamp
否则它将是一个问题。因此,我始终建议让应用程序处理日期以避免此类问题。@反斜杠为什么不将数据库配置为在正确的时区工作?@Kayaman,因为我们不能。该数据库在其他两个应用程序之间共享,重新配置它需要部分时间重写两个应用程序。@反斜杠只是一种解决方法。在许多情况下,您还可以在数据库中处理时间戳创建,因此实际时区无关紧要。无法回答本机查询和传递日期之间哪个更好,但我会传递一个
Date
对象。有一次我在一个数据库与java应用所在的服务器的时区不同。因此,我们不能使用
当前\u时间戳
,否则这将是一个问题。因此,我始终建议让应用处理日期以避免此类问题。@反斜杠为什么不将数据库配置为在正确的时区工作?@Kayaman Because我们不能。数据库是在其他两个应用程序之间共享的,重新配置它需要部分重写两个应用程序。@反斜杠只是让它成为一种解决办法。在许多情况下,您也可以在数据库中处理时间戳创建,所以实际时区无关紧要。是的。如果您只需要我只是想补充一点,如果你只想用JPA的方式,不管怎样,谢谢。