Untitled
unknown
plain_text
a year ago
2.7 kB
7
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