Bonjour, j'aimerais de l'aide pour supprimer des dates en base de donn�es. J'utilise java spring, dbeaver, mariadb et docker.
La situation :
J'ai une table "Article" qui contient un comptage de vues (vues des visiteurs).
Pour se faire, j'ai cette table :
"id_visitor" est l'IP de l'utilisateur et "id_article" l'id de l'article visit� par l'internaute.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10 CREATE TABLE `visitor_info` ( `id_visitor` varchar(255) NOT NULL, `id_article` bigint(20) NOT NULL, `date_connection` datetime(6) NOT NULL, PRIMARY KEY (`id_visitor`, `id_article`), KEY `FK_id_articleVisitor` (`id_article`), CONSTRAINT `FK_id_articleVisitor` FOREIGN KEY (`id_article`) REFERENCES `article` (`id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
J'ai cod� quelque chose (un code ex�cut� tout les X temps) pour qu'un visiteur ne g�n�re pas des vues sur un m�me article plus d'une fois par tranche de 24h.
Si la date stock�e en bdd est inf�rieur � la date en param�tre (+24h de diff�rence) elle doit �tre supprim�e.
Dans le code ci dessous, ce n'est pas 24h mais 1mn. Et le code "deleteOldVisits()" s'ex�cute toutes les minutes. C'est pour faciliter le test.
Le probl�me c'est que cela ne marche pas. C'est �trange car � la base, date_connection est un "localdatetime.now()" donc cela signifie qu'il sait faire la conversion tout seul et que cela devrait fonctionner.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 @Component @EnableScheduling public class ScheduledTasks { @Autowired private VisitorInfoDAO visitorInfoDAO; public ScheduledTasks() { } @Scheduled(cron = "0 * * * * ?") public void deleteOldVisits() { System.out.println("deleteOldVisits call"); LocalDateTime cutoffDateTime = LocalDateTime.now().minusMinutes(1); this.visitorInfoDAO.deleteByDateConnectionBefore(cutoffDateTime); } } @Modifying @Query("DELETE FROM VisitorInfo v WHERE v.date_connection <= :cutoffDate") void deleteByDateConnectionBefore(@Param("cutoffDate") LocalDateTime cutoffDate);
Il arrive a convertir "2023-03-11T11:43:00.011012" (localdatetime.now() dans java) en "2023-03-11 11:43:00" dans la base de donn�es.
EDIT:
J'ai essay� aussi sans succ�s (j'ai renomm� date_connection en date car l'automation ne marchait pas) :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10 LocalDateTime cutoffDateTime = LocalDateTime.now().minusMinutes(1); DateTime cutoffDateTimeb = DateTime.now().minusMinutes(1); this.visitorInfoDAO.deleteByDateLessThan(cutoffDateTimeb); this.visitorInfoDAO.deleteByDateLessThan(cutoffDateTime); @Modifying void deleteByDateLessThan(LocalDateTime localDateTime); @Modifying void deleteByDateLessThan(DateTime localDateTime);
Partager