CrudRepository - 按日期删除

时间:2018-05-22 21:26:09

标签: java hibernate jpa crud sql-delete

你可以帮助我解决以下问题吗?

我有一个实体:

@Entity
public class Logging {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @Column(name = "domain")
    private String domain;

    @Column(name = "time_stamp")
    private Date timeStamp;

我也有:

public interface LoggingRepository extends CrudRepository<Logging, Integer> {

    // @Query("Delete from Logging l WHERE l.timeStamp < ?1 AND l.domain =?2")
    void deleteLoggingTimeStampBeforeAndByDomain(Date timeStamp, String domain);
}

使用CrudRepository我想删除小于dateX和Logging.domain = myDomain的记录记录。类似的东西:

DELETE from Logging l WHERE l.time_stamp < '2018-05-22 21:32:26' AND l.domain = 'abc.com'. 

在数据库列time_stamp中看起来像2018-05-22 21:32:26

在我的MySQL表中,日志记录time_stamp的类型为TIMESTAMP。

我使用Spring Boot。实际上我收到以下错误:

  

出现意外错误(type = Internal Server Error,   状态= 500)。参数值[2018-05-22 21:32:36.0]不匹配   期望的类型[java.lang.String(n / a)];嵌套异常是   java.lang.IllegalArgumentException:参数值[2018-05-22   21:32:36.0]与预期类型[java.lang.String(n / a)]

不匹配      

编辑:当我改变方法时:

 @Query("Delete from Logging l WHERE timeStamp < :timeStamp AND domain =:domain")
    void deleteLoggingTimeStampBeforeAndByDomain(@Param("timeStamp") Date timeStamp, @Param("domain") String domain);

我收到错误:

  

org.hibernate.hql.internal.QueryExecutionRequestException:不是   支持DML操作[从中删除   entity.Logging l WHERE timeStamp&lt; :timeStamp AND   domain =:domain]

你知道吗?我花了很多时间,但不幸的是没有成功。 我已尝试使用@Query和不使用@Query的特殊命名约定。

1 个答案:

答案 0 :(得分:0)

好的,我有解决方案:我必须像以下一样添加@Modifying:

@Modifying
@Query("Delete from Logging l WHERE timeStamp < :timeStamp AND domain =:domain")
    void deleteLoggingTimeStampBeforeAndByDomain(@Param("timeStamp") Date timeStamp, @Param("domain") String domain);

抱歉所有的大惊小怪。

谢谢。 Matley