你可以帮助我解决以下问题吗?
我有一个实体:
@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
的特殊命名约定。
答案 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