CrudRepository - удалить по дате - PullRequest
0 голосов
/ 23 мая 2018

Не могли бы вы помочь мне решить следующую проблему?

У меня есть объект:

@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.

Я используюВесенний ботинок.На самом деле я получаю следующую ошибку:

Произошла непредвиденная ошибка (тип = Внутренняя ошибка сервера, статус = 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 (н / п)]

РЕДАКТИРОВАТЬ: Когда яизмените метод emy на:

 @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 [Удалить из объекта.Logging l WHERE timeStamp <: timeStamp AND domain =: domain] </p>

У вас есть идеи?Я провел много часов, но, к сожалению, безуспешно.Я пробовал с @Query и специальным соглашением об именах без @Query.

1 Ответ

0 голосов
/ 23 мая 2018

ОК, У меня есть решение: Мне пришлось добавить @Modifying, например:

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

Извините за все эти суеты.

Спасибо.Мэтли

...