Untitled
unknown
plain_text
2 months ago
2.7 kB
4
Indexable
// Entity sınıfı (örnek) @Entity @Table(name = "your_table") public class YourEntity { @Id private Long id; private String deviceId; private String appName; private boolean deleted; private boolean disabled; // Getter ve Setter metodları } // Service veya Repository sınıfı içinde @Repository public class YourRepository { @PersistenceContext private EntityManager entityManager; @Transactional public void updateDuplicateRecords() { // 1. Önce çoklayan kayıtları bulalım String findDuplicatesQuery = """ WITH DuplicateRecords AS ( SELECT id, ROW_NUMBER() OVER ( PARTITION BY app_name, device_id ORDER BY id DESC ) as row_num FROM your_table WHERE deleted = false AND disabled = false ) SELECT id FROM DuplicateRecords WHERE row_num > 1 """; // Çoklayan ID'leri alalım List<Long> duplicateIds = entityManager.createNativeQuery(findDuplicatesQuery) .getResultList(); // 2. Eğer çoklayan kayıt varsa bunları güncelleyelim if (!duplicateIds.isEmpty()) { String updateQuery = """ UPDATE YourEntity e SET e.deleted = true WHERE e.id IN :ids """; entityManager.createQuery(updateQuery) .setParameter("ids", duplicateIds) .executeUpdate(); // Entity Manager'ı temizleyelim entityManager.flush(); entityManager.clear(); } } // Opsiyonel: Test için çoklayan kayıtları görüntüleme metodu public List<YourEntity> findDuplicates() { String query = """ SELECT e FROM YourEntity e WHERE e.id IN ( WITH DuplicateRecords AS ( SELECT id, ROW_NUMBER() OVER ( PARTITION BY app_name, device_id ORDER BY id DESC ) as row_num FROM your_table WHERE deleted = false AND disabled = false ) SELECT id FROM DuplicateRecords WHERE row_num > 1 ) """; return entityManager.createQuery(query, YourEntity.class) .getResultList(); } }
Editor is loading...
Leave a Comment