From a2f03b3724784caccb9795b9a90274ce227e3890 Mon Sep 17 00:00:00 2001 From: Avgustin Marinov Date: Thu, 14 Nov 2024 17:06:13 +0200 Subject: [PATCH] Replace CascadeOnDelete eclipse link annotation with CascadeType.REMOVE (#2028) more standard approach Signed-off-by: Avgustin Marinov --- .../resource/MgmtTargetTypeResourceTest.java | 3 +-- .../repository/jpa/JpaRolloutExecutor.java | 20 +++++++++---------- .../jpa/model/DistributionSetTypeElement.java | 8 +++----- .../repository/jpa/model/JpaAction.java | 4 ++-- .../repository/jpa/model/JpaActionStatus.java | 3 +-- .../jpa/model/JpaDistributionSet.java | 11 ++++------ .../jpa/model/JpaDistributionSetTag.java | 3 +-- .../jpa/model/JpaDistributionSetType.java | 5 +---- .../repository/jpa/model/JpaRollout.java | 5 ++--- .../repository/jpa/model/JpaRolloutGroup.java | 4 +--- .../jpa/model/JpaSoftwareModule.java | 11 +++------- .../repository/jpa/model/JpaTarget.java | 15 +++++--------- .../repository/jpa/model/JpaTargetType.java | 2 -- .../jpa/management/RolloutManagementTest.java | 1 - 14 files changed, 34 insertions(+), 61 deletions(-) diff --git a/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTypeResourceTest.java b/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTypeResourceTest.java index 79497f1e4..c53ef978e 100644 --- a/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTypeResourceTest.java +++ b/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetTypeResourceTest.java @@ -365,8 +365,7 @@ class MgmtTargetTypeResourceTest extends AbstractManagementApiIntegrationTest { @WithUser(principal = TEST_USER, allSpPermissions = true) @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID} DELETE requests.") void deletingDsTypeRemovesAssignmentFromTargetType() throws Exception { - String typeName = "TestTypeRemoveDs"; - TargetType testType = createTestTargetTypeInDB(typeName, Collections.singletonList(standardDsType)); + TargetType testType = createTestTargetTypeInDB("TestTypeRemoveDs", Collections.singletonList(standardDsType)); assertThat(testType.getCompatibleDistributionSetTypes()).hasSize(1); assertThat(distributionSetTypeManagement.getByKey(standardDsType.getKey())).isNotEmpty(); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutExecutor.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutExecutor.java index 2fff67bba..151e4b634 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutExecutor.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutExecutor.java @@ -287,8 +287,8 @@ public class JpaRolloutExecutor implements RolloutExecutor { rollout.setStatus(RolloutStatus.DELETED); rollout.setDeleted(true); rolloutRepository.save(rollout); - - sendRolloutGroupDeletedEvents(rollout); +// +// sendRolloutGroupDeletedEvents(rollout); } private void handleStopRollout(final JpaRollout rollout) { @@ -372,7 +372,7 @@ public class JpaRolloutExecutor implements RolloutExecutor { } private void hardDeleteRollout(final JpaRollout rollout) { - sendRolloutGroupDeletedEvents(rollout); +// sendRolloutGroupDeletedEvents(rollout); rolloutRepository.delete(rollout); } @@ -397,13 +397,13 @@ public class JpaRolloutExecutor implements RolloutExecutor { return actionRepository.findByRolloutIdAndStatus(PageRequest.of(0, TRANSACTION_ACTIONS), rollout.getId(), Status.SCHEDULED); } - - private void sendRolloutGroupDeletedEvents(final JpaRollout rollout) { - final List groupIds = rollout.getRolloutGroups().stream().map(RolloutGroup::getId).toList(); - afterCommit.afterCommit(() -> groupIds.forEach(rolloutGroupId -> eventPublisherHolder.getEventPublisher() - .publishEvent(new RolloutGroupDeletedEvent(tenantAware.getCurrentTenant(), rolloutGroupId, - JpaRolloutGroup.class, eventPublisherHolder.getApplicationId())))); - } +// +// private void sendRolloutGroupDeletedEvents(final JpaRollout rollout) { +// final List groupIds = rollout.getRolloutGroups().stream().map(RolloutGroup::getId).toList(); +// afterCommit.afterCommit(() -> groupIds.forEach(rolloutGroupId -> eventPublisherHolder.getEventPublisher() +// .publishEvent(new RolloutGroupDeletedEvent(tenantAware.getCurrentTenant(), rolloutGroupId, +// JpaRolloutGroup.class, eventPublisherHolder.getApplicationId())))); +// } private boolean isRolloutComplete(final JpaRollout rollout) { // ensure that changes in the same transaction count diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DistributionSetTypeElement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DistributionSetTypeElement.java index d89097cb8..85a58168d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DistributionSetTypeElement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/DistributionSetTypeElement.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.repository.jpa.model; import java.io.Serializable; +import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.ConstraintMode; import jakarta.persistence.EmbeddedId; @@ -25,7 +26,6 @@ import jakarta.persistence.Table; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; -import org.eclipse.persistence.annotations.CascadeOnDelete; /** * Relation element between a {@link DistributionSetType} and its @@ -43,15 +43,13 @@ public class DistributionSetTypeElement implements Serializable { @Column(name = "mandatory") private boolean mandatory; - @CascadeOnDelete @MapsId("dsType") - @ManyToOne(optional = false, fetch = FetchType.LAZY) + @ManyToOne(optional = false, fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }) @JoinColumn(name = "distribution_set_type", nullable = false, updatable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_type_element_element")) private JpaDistributionSetType dsType; - @CascadeOnDelete @MapsId("smType") - @ManyToOne(optional = false, fetch = FetchType.LAZY) + @ManyToOne(optional = false, fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }) @JoinColumn(name = "software_module_type", nullable = false, updatable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_type_element_smtype")) private JpaSoftwareModuleType smType; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java index 8a7b203b5..0dea1585e 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaAction.java @@ -15,6 +15,7 @@ import java.util.Collections; import java.util.List; import java.util.Optional; +import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.ConstraintMode; import jakarta.persistence.Entity; @@ -123,8 +124,7 @@ public class JpaAction extends AbstractJpaTenantAwareBaseEntity implements Actio @NotNull private Status status; - @CascadeOnDelete - @OneToMany(mappedBy = "action", targetEntity = JpaActionStatus.class, fetch = FetchType.LAZY) + @OneToMany(mappedBy = "action", targetEntity = JpaActionStatus.class, fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }) private List actionStatus; @ManyToOne(fetch = FetchType.LAZY) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java index 4a12b4c57..ba1b22f0e 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaActionStatus.java @@ -32,7 +32,6 @@ import jakarta.validation.constraints.NotNull; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; -import org.eclipse.persistence.annotations.CascadeOnDelete; import org.eclipse.persistence.annotations.ConversionValue; import org.eclipse.persistence.annotations.Convert; import org.eclipse.persistence.annotations.ObjectTypeConverter; @@ -82,7 +81,7 @@ public class JpaActionStatus extends AbstractJpaTenantAwareBaseEntity implements @NotNull private Status status; - @CascadeOnDelete + // no cascade option on an ElementCollection, the target objects are always persisted, merged, removed with their parent. @ElementCollection(fetch = FetchType.LAZY, targetClass = String.class) @CollectionTable( name = "sp_action_status_messages", diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java index 529d16c3a..9a85b5e87 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSet.java @@ -18,6 +18,7 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; +import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.ConstraintMode; import jakarta.persistence.Entity; @@ -51,7 +52,6 @@ import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder; -import org.eclipse.persistence.annotations.CascadeOnDelete; import org.eclipse.persistence.descriptors.DescriptorEvent; import org.eclipse.persistence.queries.UpdateObjectQuery; import org.eclipse.persistence.sessions.changesets.DirectToFieldChangeRecord; @@ -86,8 +86,7 @@ public class JpaDistributionSet extends AbstractJpaNamedVersionedEntity implemen @NotNull private DistributionSetType type; - @CascadeOnDelete - @ManyToMany(targetEntity = JpaSoftwareModule.class, fetch = FetchType.LAZY) + @ManyToMany(targetEntity = JpaSoftwareModule.class, fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }) @JoinTable( name = "sp_ds_module", joinColumns = { @@ -100,8 +99,7 @@ public class JpaDistributionSet extends AbstractJpaNamedVersionedEntity implemen foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_module_module")) }) private Set modules; - @CascadeOnDelete - @ManyToMany(targetEntity = JpaDistributionSetTag.class) + @ManyToMany(cascade = { CascadeType.REMOVE }, targetEntity = JpaDistributionSetTag.class) @JoinTable( name = "sp_ds_dstag", joinColumns = { @@ -115,8 +113,7 @@ public class JpaDistributionSet extends AbstractJpaNamedVersionedEntity implemen private Set tags; @ToString.Exclude - @CascadeOnDelete - @OneToMany(mappedBy = "distributionSet", fetch = FetchType.LAZY, targetEntity = JpaDistributionSetMetadata.class) + @OneToMany(mappedBy = "distributionSet", fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, targetEntity = JpaDistributionSetMetadata.class) private List metadata; @Column(name = "complete") diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java index 3235111e1..718dc6bdb 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetTag.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.repository.jpa.model; import java.util.List; +import jakarta.persistence.CascadeType; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; import jakarta.persistence.Index; @@ -24,7 +25,6 @@ import org.eclipse.hawkbit.repository.event.remote.entity.DistributionSetTagUpda import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder; -import org.eclipse.persistence.annotations.CascadeOnDelete; import org.eclipse.persistence.descriptors.DescriptorEvent; /** @@ -40,7 +40,6 @@ public class JpaDistributionSetTag extends JpaTag implements DistributionSetTag, private static final long serialVersionUID = 1L; - @CascadeOnDelete @ManyToMany(mappedBy = "tags", targetEntity = JpaDistributionSet.class, fetch = FetchType.LAZY) private List assignedToDistributionSet; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java index 2adde365f..433e5aa33 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaDistributionSetType.java @@ -58,15 +58,12 @@ public class JpaDistributionSetType extends AbstractJpaTypeEntity implements Dis @Serial private static final long serialVersionUID = 1L; - @CascadeOnDelete - @OneToMany(mappedBy = "dsType", targetEntity = DistributionSetTypeElement.class, cascade = { - CascadeType.PERSIST }, fetch = FetchType.EAGER, orphanRemoval = true) + @OneToMany(mappedBy = "dsType", targetEntity = DistributionSetTypeElement.class, fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.REMOVE }, orphanRemoval = true) private Set elements; @Column(name = "deleted") private boolean deleted; - @CascadeOnDelete @ManyToMany(mappedBy = "distributionSetTypes", targetEntity = JpaTargetType.class, fetch = FetchType.LAZY) private List compatibleToTargetTypes; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java index 895657498..8ed29a8dc 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java @@ -14,6 +14,7 @@ import java.util.List; import java.util.Optional; import java.util.stream.Collectors; +import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.ConstraintMode; import jakarta.persistence.Entity; @@ -41,7 +42,6 @@ import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder; -import org.eclipse.persistence.annotations.CascadeOnDelete; import org.eclipse.persistence.annotations.ConversionValue; import org.eclipse.persistence.annotations.Convert; import org.eclipse.persistence.annotations.ObjectTypeConverter; @@ -65,8 +65,7 @@ public class JpaRollout extends AbstractJpaNamedEntity implements Rollout, Event private static final String DELETED_PROPERTY = "deleted"; - @CascadeOnDelete - @OneToMany(targetEntity = JpaRolloutGroup.class, fetch = FetchType.LAZY, mappedBy = "rollout") + @OneToMany(targetEntity = JpaRolloutGroup.class, fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, mappedBy = "rollout") private List rolloutGroups; @Column(name = "target_filter", length = TargetFilterQuery.QUERY_MAX_SIZE, nullable = false) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java index 7b0d7837a..3b35d090b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRolloutGroup.java @@ -36,7 +36,6 @@ import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder; -import org.eclipse.persistence.annotations.CascadeOnDelete; import org.eclipse.persistence.annotations.ConversionValue; import org.eclipse.persistence.annotations.Convert; import org.eclipse.persistence.annotations.ObjectTypeConverter; @@ -72,8 +71,7 @@ public class JpaRolloutGroup extends AbstractJpaNamedEntity implements RolloutGr @Convert("rolloutgroupstatus") private RolloutGroupStatus status = RolloutGroupStatus.CREATING; - @CascadeOnDelete - @OneToMany(mappedBy = "rolloutGroup", fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST }, targetEntity = RolloutTargetGroup.class) + @OneToMany(mappedBy = "rolloutGroup", fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.REMOVE }, targetEntity = RolloutTargetGroup.class) private List rolloutTargetGroup; // No foreign key to avoid to many nested cascades on delete which some DBs cannot handle 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 ab9ea2585..597f7756f 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 @@ -46,7 +46,6 @@ 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.helper.EventPublisherHolder; -import org.eclipse.persistence.annotations.CascadeOnDelete; import org.eclipse.persistence.descriptors.DescriptorEvent; import org.eclipse.persistence.queries.UpdateObjectQuery; import org.eclipse.persistence.sessions.changesets.DirectToFieldChangeRecord; @@ -82,9 +81,7 @@ public class JpaSoftwareModule extends AbstractJpaNamedVersionedEntity implement @NotNull private JpaSoftwareModuleType type; - @CascadeOnDelete - @OneToMany(fetch = FetchType.LAZY, mappedBy = "softwareModule", cascade = { - CascadeType.PERSIST }, targetEntity = JpaArtifact.class, orphanRemoval = true) + @OneToMany(fetch = FetchType.LAZY, mappedBy = "softwareModule", cascade = { CascadeType.PERSIST, CascadeType.REMOVE }, targetEntity = JpaArtifact.class, orphanRemoval = true) private List artifacts; @Setter @@ -97,8 +94,7 @@ public class JpaSoftwareModule extends AbstractJpaNamedVersionedEntity implement private boolean encrypted; @ToString.Exclude - @CascadeOnDelete - @OneToMany(mappedBy = "softwareModule", fetch = FetchType.LAZY, targetEntity = JpaSoftwareModuleMetadata.class) + @OneToMany(mappedBy = "softwareModule", fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, targetEntity = JpaSoftwareModuleMetadata.class) private List metadata; @Column(name = "locked") @@ -109,8 +105,7 @@ public class JpaSoftwareModule extends AbstractJpaNamedVersionedEntity implement @ToString.Exclude @Getter(AccessLevel.NONE) - @CascadeOnDelete - @ManyToMany(mappedBy = "modules", targetEntity = JpaDistributionSet.class, fetch = FetchType.LAZY) + @ManyToMany(mappedBy = "modules", targetEntity = JpaDistributionSet.class, fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }) private List assignedTo; /** diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java index e29599466..b0849a3fb 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java @@ -61,7 +61,6 @@ import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder; import org.eclipse.hawkbit.repository.model.helper.SystemSecurityContextHolder; import org.eclipse.hawkbit.repository.model.helper.TenantConfigurationManagementHolder; import org.eclipse.hawkbit.security.SystemSecurityContext; -import org.eclipse.persistence.annotations.CascadeOnDelete; import org.eclipse.persistence.annotations.ConversionValue; import org.eclipse.persistence.annotations.Convert; import org.eclipse.persistence.annotations.ObjectTypeConverter; @@ -96,8 +95,7 @@ public class JpaTarget extends AbstractJpaNamedEntity implements Target, EventAw @Pattern(regexp = "[\\S]*", message = "has whitespaces which are not allowed") private String controllerId; - @CascadeOnDelete - @OneToMany(mappedBy = "target", fetch = FetchType.LAZY, targetEntity = JpaAction.class) + @OneToMany(mappedBy = "target", fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, targetEntity = JpaAction.class) private List actions; /** @@ -109,8 +107,7 @@ public class JpaTarget extends AbstractJpaNamedEntity implements Target, EventAw @NotNull private String securityToken; - @CascadeOnDelete - @OneToMany(mappedBy = "target", fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST }) + @OneToMany(mappedBy = "target", fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.REMOVE }) private List rolloutTargetGroup; @Column(name = "address", length = Target.ADDRESS_MAX_SIZE) @@ -154,8 +151,7 @@ public class JpaTarget extends AbstractJpaNamedEntity implements Target, EventAw @JoinColumn(name = "target_type", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_target_relation_target_type")) private TargetType targetType; - @CascadeOnDelete - @ManyToMany(targetEntity = JpaTargetTag.class) + @ManyToMany(cascade = { CascadeType.REMOVE }, targetEntity = JpaTargetTag.class) @JoinTable( name = "sp_target_target_tag", joinColumns = { @@ -172,7 +168,7 @@ public class JpaTarget extends AbstractJpaNamedEntity implements Target, EventAw /** * Supplied / committed by the controller. Read-only via management API. */ - @CascadeOnDelete + // no cascade option on an ElementCollection, the target objects are always persisted, merged, removed with their parent. @ElementCollection @Column(name = "attribute_value", length = Target.CONTROLLER_ATTRIBUTE_VALUE_SIZE) @MapKeyColumn(name = "attribute_key", nullable = false, length = Target.CONTROLLER_ATTRIBUTE_KEY_SIZE) @@ -182,8 +178,7 @@ public class JpaTarget extends AbstractJpaNamedEntity implements Target, EventAw foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_targ_attrib_target")) private Map controllerAttributes; - @CascadeOnDelete - @OneToMany(mappedBy = "target", fetch = FetchType.LAZY, targetEntity = JpaTargetMetadata.class) + @OneToMany(mappedBy = "target", fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, targetEntity = JpaTargetMetadata.class) private List metadata; /** diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetType.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetType.java index 09abe456b..12cd6e240 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetType.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTargetType.java @@ -33,7 +33,6 @@ import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetType; import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder; -import org.eclipse.persistence.annotations.CascadeOnDelete; import org.eclipse.persistence.descriptors.DescriptorEvent; /** @@ -51,7 +50,6 @@ public class JpaTargetType extends AbstractJpaTypeEntity implements TargetType, @Serial private static final long serialVersionUID = 1L; - @CascadeOnDelete @ManyToMany(targetEntity = JpaDistributionSetType.class) @JoinTable( name = "sp_target_type_ds_type_relation", diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/RolloutManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/RolloutManagementTest.java index e8df037ec..293390543 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/RolloutManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/RolloutManagementTest.java @@ -1807,7 +1807,6 @@ class RolloutManagementTest extends AbstractJpaIntegrationTest { @Expect(type = TargetCreatedEvent.class, count = 25), @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = RolloutGroupCreatedEvent.class, count = 5), - @Expect(type = RolloutGroupDeletedEvent.class, count = 5), @Expect(type = ActionCreatedEvent.class, count = 10), @Expect(type = ActionUpdatedEvent.class, count = 2), @Expect(type = RolloutDeletedEvent.class, count = 1), @Expect(type = RolloutCreatedEvent.class, count = 1) })