From 3ef38e5c6a79454eabfa2ca815a68a2faac857e8 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 20 Apr 2017 14:08:23 +0200 Subject: [PATCH] Tenant delete by query and not select/delete on individual entities. (#492) * tenant delete by query and not select/delete on individual entities. Signed-off-by: kaizimmerm * Fix UK docs and query. Signed-off-by: kaizimmerm * Fix broken test. That event should never have been there in the first place. Signed-off-by: kaizimmerm --- .../ddi/rest/resource/DdiRootControllerTest.java | 3 +-- .../repository/jpa/BaseEntityRepository.java | 11 ----------- .../repository/jpa/DistributionSetRepository.java | 12 ++++++++++++ .../jpa/DistributionSetTagRepository.java | 14 ++++++++++++++ .../jpa/DistributionSetTypeRepository.java | 15 +++++++++++++++ .../hawkbit/repository/jpa/RolloutRepository.java | 14 ++++++++++++++ .../repository/jpa/SoftwareModuleRepository.java | 12 ++++++++++++ .../jpa/SoftwareModuleTypeRepository.java | 14 ++++++++++++++ .../jpa/TargetFilterQueryRepository.java | 12 ++++++++++++ .../hawkbit/repository/jpa/TargetRepository.java | 12 ++++++++++++ .../repository/jpa/TargetTagRepository.java | 14 ++++++++++++++ .../jpa/TenantConfigurationRepository.java | 15 +++++++++++++++ .../repository/jpa/TenantMetaDataRepository.java | 5 ++++- .../hawkbit/repository/jpa/model/JpaAction.java | 2 +- .../jpa/model/JpaDistributionSetTag.java | 2 ++ .../repository/jpa/model/JpaSoftwareModule.java | 1 + .../repository/jpa/model/JpaTargetTag.java | 2 ++ 17 files changed, 145 insertions(+), 15 deletions(-) diff --git a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java index b1ee0f4a1..43bf8fd57 100644 --- a/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java +++ b/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java @@ -25,7 +25,6 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import org.eclipse.hawkbit.im.authentication.SpPermission; import org.eclipse.hawkbit.repository.event.remote.TargetAssignDistributionSetEvent; -import org.eclipse.hawkbit.repository.event.remote.TargetDeletedEvent; import org.eclipse.hawkbit.repository.event.remote.TargetPollEvent; import org.eclipse.hawkbit.repository.event.remote.entity.ActionCreatedEvent; import org.eclipse.hawkbit.repository.event.remote.entity.ActionUpdatedEvent; @@ -69,7 +68,7 @@ public class DdiRootControllerTest extends AbstractDDiApiIntegrationTest { @WithUser(tenantId = "tenantDoesNotExists", allSpPermissions = true, authorities = { CONTROLLER_ROLE, SYSTEM_ROLE }, autoCreateTenant = false) @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), - @Expect(type = TargetDeletedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1) }) + @Expect(type = TargetPollEvent.class, count = 1) }) public void targetCannotBeRegisteredIfTenantDoesNotExistsButWhenExists() throws Exception { mvc.perform(get("/default-tenant/", tenantAware.getCurrentTenant())).andDo(MockMvcResultPrinter.print()) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/BaseEntityRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/BaseEntityRepository.java index 170507113..6ead45083 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/BaseEntityRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/BaseEntityRepository.java @@ -14,7 +14,6 @@ import java.util.Optional; import org.eclipse.hawkbit.repository.jpa.model.AbstractJpaTenantAwareBaseEntity; import org.eclipse.hawkbit.repository.model.BaseEntity; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; -import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.repository.NoRepositoryBean; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.transaction.annotation.Transactional; @@ -32,16 +31,6 @@ import org.springframework.transaction.annotation.Transactional; public interface BaseEntityRepository extends PagingAndSortingRepository { - /** - * Deletes all {@link TenantAwareBaseEntity} of a given tenant. - * - * @param tenant - * to delete data from - */ - @Modifying - @Transactional - void deleteByTenantIgnoreCase(String tenant); - /** * Retrieves an {@link BaseEntity} by its id. * diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java index 46b2c6bb5..be24f4e95 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java @@ -19,6 +19,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Tag; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; @@ -141,4 +142,15 @@ public interface DistributionSetRepository // Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=349477 @Query("SELECT d FROM JpaDistributionSet d WHERE d.id IN ?1") List findAll(Iterable ids); + + /** + * Deletes all {@link TenantAwareBaseEntity} of a given tenant. + * + * @param tenant + * to delete data from + */ + @Modifying + @Transactional + @Query("DELETE FROM JpaDistributionSet t WHERE UPPER(t.tenant) = UPPER(:tenant)") + void deleteByTenantIgnoreCase(@Param("tenant") String tenant); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTagRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTagRepository.java index 4d1179689..74127bb36 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTagRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTagRepository.java @@ -15,8 +15,11 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.TargetTag; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.transaction.annotation.Transactional; /** @@ -53,4 +56,15 @@ public interface DistributionSetTagRepository */ @Override List findAll(); + + /** + * Deletes all {@link TenantAwareBaseEntity} of a given tenant. + * + * @param tenant + * to delete data from + */ + @Modifying + @Transactional + @Query("DELETE FROM JpaDistributionSetTag t WHERE UPPER(t.tenant) = UPPER(:tenant)") + void deleteByTenantIgnoreCase(@Param("tenant") String tenant); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeRepository.java index 6cc2dfc3d..5b330cc05 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeRepository.java @@ -11,10 +11,14 @@ package org.eclipse.hawkbit.repository.jpa; import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; import org.eclipse.hawkbit.repository.model.DistributionSetType; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.data.repository.query.Param; import org.springframework.transaction.annotation.Transactional; /** @@ -55,4 +59,15 @@ public interface DistributionSetTypeRepository * assigned to the given software module type */ Long countByElementsSmType(JpaSoftwareModuleType softwareModuleType); + + /** + * Deletes all {@link TenantAwareBaseEntity} of a given tenant. + * + * @param tenant + * to delete data from + */ + @Modifying + @Transactional + @Query("DELETE FROM JpaDistributionSetType t WHERE UPPER(t.tenant) = UPPER(:tenant)") + void deleteByTenantIgnoreCase(@Param("tenant") String tenant); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java index 0e4efb09e..fa5e4d6d8 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java @@ -15,8 +15,11 @@ import java.util.Optional; import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.transaction.annotation.Transactional; /** @@ -45,4 +48,15 @@ public interface RolloutRepository * @return {@link Rollout} for specific name */ Optional findByName(String name); + + /** + * Deletes all {@link TenantAwareBaseEntity} of a given tenant. + * + * @param tenant + * to delete data from + */ + @Modifying + @Transactional + @Query("DELETE FROM JpaRollout t WHERE UPPER(t.tenant) = UPPER(:tenant)") + void deleteByTenantIgnoreCase(@Param("tenant") String tenant); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleRepository.java index 045b890d6..427c46d93 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleRepository.java @@ -17,6 +17,7 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; @@ -107,4 +108,15 @@ public interface SoftwareModuleRepository // Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=349477 @Query("SELECT sm FROM JpaSoftwareModule sm WHERE sm.id IN ?1") List findByIdIn(Iterable ids); + + /** + * Deletes all {@link TenantAwareBaseEntity} of a given tenant. + * + * @param tenant + * to delete data from + */ + @Modifying + @Transactional + @Query("DELETE FROM JpaSoftwareModule t WHERE UPPER(t.tenant) = UPPER(:tenant)") + void deleteByTenantIgnoreCase(@Param("tenant") String tenant); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleTypeRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleTypeRepository.java index 75382ea58..4fbe007e6 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleTypeRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleTypeRepository.java @@ -14,10 +14,13 @@ import java.util.Optional; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.transaction.annotation.Transactional; /** @@ -74,4 +77,15 @@ public interface SoftwareModuleTypeRepository // Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=349477 @Query("SELECT sm FROM JpaSoftwareModuleType sm WHERE sm.id IN ?1") List findByIdIn(Iterable ids); + + /** + * Deletes all {@link TenantAwareBaseEntity} of a given tenant. + * + * @param tenant + * to delete data from + */ + @Modifying + @Transactional + @Query("DELETE FROM JpaSoftwareModuleType t WHERE UPPER(t.tenant) = UPPER(:tenant)") + void deleteByTenantIgnoreCase(@Param("tenant") String tenant); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryRepository.java index 6be600621..3026e19a2 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryRepository.java @@ -12,6 +12,7 @@ import java.util.Optional; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetFilterQuery; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.springframework.data.domain.Page; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; @@ -52,4 +53,15 @@ public interface TargetFilterQueryRepository @Query("update JpaTargetFilterQuery d set d.autoAssignDistributionSet = NULL where d.autoAssignDistributionSet in :ids") void unsetAutoAssignDistributionSet(@Param("ids") Long... dsIds); + /** + * Deletes all {@link TenantAwareBaseEntity} of a given tenant. + * + * @param tenant + * to delete data from + */ + @Modifying + @Transactional + @Query("DELETE FROM JpaTargetFilterQuery t WHERE UPPER(t.tenant) = UPPER(:tenant)") + void deleteByTenantIgnoreCase(@Param("tenant") String tenant); + } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetRepository.java index 7feb367d3..d36942a26 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetRepository.java @@ -19,6 +19,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; @@ -208,4 +209,15 @@ public interface TargetRepository extends BaseEntityRepository, * @return a page of all targets related to a rollout group */ Page findByActionsRolloutGroupId(Long rolloutGroupId, Pageable page); + + /** + * Deletes all {@link TenantAwareBaseEntity} of a given tenant. + * + * @param tenant + * to delete data from + */ + @Modifying + @Transactional + @Query("DELETE FROM JpaTarget t WHERE UPPER(t.tenant) = UPPER(:tenant)") + void deleteByTenantIgnoreCase(@Param("tenant") String tenant); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetTagRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetTagRepository.java index 7caafdffc..ccffd70da 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetTagRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetTagRepository.java @@ -13,8 +13,11 @@ import java.util.Optional; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; import org.eclipse.hawkbit.repository.model.TargetTag; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.transaction.annotation.Transactional; /** @@ -52,4 +55,15 @@ public interface TargetTagRepository */ @Override List findAll(); + + /** + * Deletes all {@link TenantAwareBaseEntity} of a given tenant. + * + * @param tenant + * to delete data from + */ + @Modifying + @Transactional + @Query("DELETE FROM JpaTargetTag t WHERE UPPER(t.tenant) = UPPER(:tenant)") + void deleteByTenantIgnoreCase(@Param("tenant") String tenant); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationRepository.java index 50165a11c..4d4c58e18 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationRepository.java @@ -9,7 +9,11 @@ package org.eclipse.hawkbit.repository.jpa; import org.eclipse.hawkbit.repository.jpa.model.JpaTenantConfiguration; +import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.eclipse.hawkbit.repository.model.TenantConfiguration; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.transaction.annotation.Transactional; /** @@ -38,4 +42,15 @@ public interface TenantConfigurationRepository extends BaseEntityRepository assignedToDistributionSet; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java index 858241c47..2f471c2f3 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaSoftwareModule.java @@ -70,6 +70,7 @@ public class JpaSoftwareModule extends AbstractJpaNamedVersionedEntity implement @NotNull private JpaSoftwareModuleType type; + @CascadeOnDelete @ManyToMany(mappedBy = "modules", targetEntity = JpaDistributionSet.class, fetch = FetchType.LAZY) private List assignedTo; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetTag.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetTag.java index b41f7b883..4326bb312 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetTag.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetTag.java @@ -24,6 +24,7 @@ import org.eclipse.hawkbit.repository.event.remote.entity.TargetTagUpdateEvent; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder; +import org.eclipse.persistence.annotations.CascadeOnDelete; import org.eclipse.persistence.descriptors.DescriptorEvent; /** @@ -38,6 +39,7 @@ import org.eclipse.persistence.descriptors.DescriptorEvent; public class JpaTargetTag extends JpaTag implements TargetTag, EventAwareEntity { private static final long serialVersionUID = 1L; + @CascadeOnDelete @ManyToMany(mappedBy = "tags", targetEntity = JpaTarget.class, fetch = FetchType.LAZY) private List assignedToTargets;