Replace CascadeOnDelete eclipse link annotation with CascadeType.REMOVE (#2028)

more standard approach

Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
This commit is contained in:
Avgustin Marinov
2024-11-14 17:06:13 +02:00
committed by GitHub
parent fdd00623b5
commit a2f03b3724
14 changed files with 34 additions and 61 deletions

View File

@@ -365,8 +365,7 @@ class MgmtTargetTypeResourceTest extends AbstractManagementApiIntegrationTest {
@WithUser(principal = TEST_USER, allSpPermissions = true) @WithUser(principal = TEST_USER, allSpPermissions = true)
@Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID} DELETE requests.") @Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID} DELETE requests.")
void deletingDsTypeRemovesAssignmentFromTargetType() throws Exception { void deletingDsTypeRemovesAssignmentFromTargetType() throws Exception {
String typeName = "TestTypeRemoveDs"; TargetType testType = createTestTargetTypeInDB("TestTypeRemoveDs", Collections.singletonList(standardDsType));
TargetType testType = createTestTargetTypeInDB(typeName, Collections.singletonList(standardDsType));
assertThat(testType.getCompatibleDistributionSetTypes()).hasSize(1); assertThat(testType.getCompatibleDistributionSetTypes()).hasSize(1);
assertThat(distributionSetTypeManagement.getByKey(standardDsType.getKey())).isNotEmpty(); assertThat(distributionSetTypeManagement.getByKey(standardDsType.getKey())).isNotEmpty();

View File

@@ -287,8 +287,8 @@ public class JpaRolloutExecutor implements RolloutExecutor {
rollout.setStatus(RolloutStatus.DELETED); rollout.setStatus(RolloutStatus.DELETED);
rollout.setDeleted(true); rollout.setDeleted(true);
rolloutRepository.save(rollout); rolloutRepository.save(rollout);
//
sendRolloutGroupDeletedEvents(rollout); // sendRolloutGroupDeletedEvents(rollout);
} }
private void handleStopRollout(final JpaRollout rollout) { private void handleStopRollout(final JpaRollout rollout) {
@@ -372,7 +372,7 @@ public class JpaRolloutExecutor implements RolloutExecutor {
} }
private void hardDeleteRollout(final JpaRollout rollout) { private void hardDeleteRollout(final JpaRollout rollout) {
sendRolloutGroupDeletedEvents(rollout); // sendRolloutGroupDeletedEvents(rollout);
rolloutRepository.delete(rollout); rolloutRepository.delete(rollout);
} }
@@ -397,13 +397,13 @@ public class JpaRolloutExecutor implements RolloutExecutor {
return actionRepository.findByRolloutIdAndStatus(PageRequest.of(0, TRANSACTION_ACTIONS), rollout.getId(), return actionRepository.findByRolloutIdAndStatus(PageRequest.of(0, TRANSACTION_ACTIONS), rollout.getId(),
Status.SCHEDULED); Status.SCHEDULED);
} }
//
private void sendRolloutGroupDeletedEvents(final JpaRollout rollout) { // private void sendRolloutGroupDeletedEvents(final JpaRollout rollout) {
final List<Long> groupIds = rollout.getRolloutGroups().stream().map(RolloutGroup::getId).toList(); // final List<Long> groupIds = rollout.getRolloutGroups().stream().map(RolloutGroup::getId).toList();
afterCommit.afterCommit(() -> groupIds.forEach(rolloutGroupId -> eventPublisherHolder.getEventPublisher() // afterCommit.afterCommit(() -> groupIds.forEach(rolloutGroupId -> eventPublisherHolder.getEventPublisher()
.publishEvent(new RolloutGroupDeletedEvent(tenantAware.getCurrentTenant(), rolloutGroupId, // .publishEvent(new RolloutGroupDeletedEvent(tenantAware.getCurrentTenant(), rolloutGroupId,
JpaRolloutGroup.class, eventPublisherHolder.getApplicationId())))); // JpaRolloutGroup.class, eventPublisherHolder.getApplicationId()))));
} // }
private boolean isRolloutComplete(final JpaRollout rollout) { private boolean isRolloutComplete(final JpaRollout rollout) {
// ensure that changes in the same transaction count // ensure that changes in the same transaction count

View File

@@ -11,6 +11,7 @@ package org.eclipse.hawkbit.repository.jpa.model;
import java.io.Serializable; import java.io.Serializable;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column; import jakarta.persistence.Column;
import jakarta.persistence.ConstraintMode; import jakarta.persistence.ConstraintMode;
import jakarta.persistence.EmbeddedId; 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.DistributionSet;
import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.DistributionSetType;
import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType;
import org.eclipse.persistence.annotations.CascadeOnDelete;
/** /**
* Relation element between a {@link DistributionSetType} and its * Relation element between a {@link DistributionSetType} and its
@@ -43,15 +43,13 @@ public class DistributionSetTypeElement implements Serializable {
@Column(name = "mandatory") @Column(name = "mandatory")
private boolean mandatory; private boolean mandatory;
@CascadeOnDelete
@MapsId("dsType") @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")) @JoinColumn(name = "distribution_set_type", nullable = false, updatable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_type_element_element"))
private JpaDistributionSetType dsType; private JpaDistributionSetType dsType;
@CascadeOnDelete
@MapsId("smType") @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")) @JoinColumn(name = "software_module_type", nullable = false, updatable = false, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_type_element_smtype"))
private JpaSoftwareModuleType smType; private JpaSoftwareModuleType smType;

View File

@@ -15,6 +15,7 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column; import jakarta.persistence.Column;
import jakarta.persistence.ConstraintMode; import jakarta.persistence.ConstraintMode;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
@@ -123,8 +124,7 @@ public class JpaAction extends AbstractJpaTenantAwareBaseEntity implements Actio
@NotNull @NotNull
private Status status; private Status status;
@CascadeOnDelete @OneToMany(mappedBy = "action", targetEntity = JpaActionStatus.class, fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE })
@OneToMany(mappedBy = "action", targetEntity = JpaActionStatus.class, fetch = FetchType.LAZY)
private List<JpaActionStatus> actionStatus; private List<JpaActionStatus> actionStatus;
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)

View File

@@ -32,7 +32,6 @@ import jakarta.validation.constraints.NotNull;
import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action;
import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.Action.Status;
import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.ActionStatus;
import org.eclipse.persistence.annotations.CascadeOnDelete;
import org.eclipse.persistence.annotations.ConversionValue; import org.eclipse.persistence.annotations.ConversionValue;
import org.eclipse.persistence.annotations.Convert; import org.eclipse.persistence.annotations.Convert;
import org.eclipse.persistence.annotations.ObjectTypeConverter; import org.eclipse.persistence.annotations.ObjectTypeConverter;
@@ -82,7 +81,7 @@ public class JpaActionStatus extends AbstractJpaTenantAwareBaseEntity implements
@NotNull @NotNull
private Status status; 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) @ElementCollection(fetch = FetchType.LAZY, targetClass = String.class)
@CollectionTable( @CollectionTable(
name = "sp_action_status_messages", name = "sp_action_status_messages",

View File

@@ -18,6 +18,7 @@ import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column; import jakarta.persistence.Column;
import jakarta.persistence.ConstraintMode; import jakarta.persistence.ConstraintMode;
import jakarta.persistence.Entity; 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.DistributionSetType;
import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModule;
import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder; import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder;
import org.eclipse.persistence.annotations.CascadeOnDelete;
import org.eclipse.persistence.descriptors.DescriptorEvent; import org.eclipse.persistence.descriptors.DescriptorEvent;
import org.eclipse.persistence.queries.UpdateObjectQuery; import org.eclipse.persistence.queries.UpdateObjectQuery;
import org.eclipse.persistence.sessions.changesets.DirectToFieldChangeRecord; import org.eclipse.persistence.sessions.changesets.DirectToFieldChangeRecord;
@@ -86,8 +86,7 @@ public class JpaDistributionSet extends AbstractJpaNamedVersionedEntity implemen
@NotNull @NotNull
private DistributionSetType type; private DistributionSetType type;
@CascadeOnDelete @ManyToMany(targetEntity = JpaSoftwareModule.class, fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE })
@ManyToMany(targetEntity = JpaSoftwareModule.class, fetch = FetchType.LAZY)
@JoinTable( @JoinTable(
name = "sp_ds_module", name = "sp_ds_module",
joinColumns = { joinColumns = {
@@ -100,8 +99,7 @@ public class JpaDistributionSet extends AbstractJpaNamedVersionedEntity implemen
foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_module_module")) }) foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_ds_module_module")) })
private Set<SoftwareModule> modules; private Set<SoftwareModule> modules;
@CascadeOnDelete @ManyToMany(cascade = { CascadeType.REMOVE }, targetEntity = JpaDistributionSetTag.class)
@ManyToMany(targetEntity = JpaDistributionSetTag.class)
@JoinTable( @JoinTable(
name = "sp_ds_dstag", name = "sp_ds_dstag",
joinColumns = { joinColumns = {
@@ -115,8 +113,7 @@ public class JpaDistributionSet extends AbstractJpaNamedVersionedEntity implemen
private Set<DistributionSetTag> tags; private Set<DistributionSetTag> tags;
@ToString.Exclude @ToString.Exclude
@CascadeOnDelete @OneToMany(mappedBy = "distributionSet", fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, targetEntity = JpaDistributionSetMetadata.class)
@OneToMany(mappedBy = "distributionSet", fetch = FetchType.LAZY, targetEntity = JpaDistributionSetMetadata.class)
private List<DistributionSetMetadata> metadata; private List<DistributionSetMetadata> metadata;
@Column(name = "complete") @Column(name = "complete")

View File

@@ -11,6 +11,7 @@ package org.eclipse.hawkbit.repository.jpa.model;
import java.util.List; import java.util.List;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.FetchType; import jakarta.persistence.FetchType;
import jakarta.persistence.Index; 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.DistributionSet;
import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetTag;
import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder; import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder;
import org.eclipse.persistence.annotations.CascadeOnDelete;
import org.eclipse.persistence.descriptors.DescriptorEvent; import org.eclipse.persistence.descriptors.DescriptorEvent;
/** /**
@@ -40,7 +40,6 @@ public class JpaDistributionSetTag extends JpaTag implements DistributionSetTag,
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@CascadeOnDelete
@ManyToMany(mappedBy = "tags", targetEntity = JpaDistributionSet.class, fetch = FetchType.LAZY) @ManyToMany(mappedBy = "tags", targetEntity = JpaDistributionSet.class, fetch = FetchType.LAZY)
private List<DistributionSet> assignedToDistributionSet; private List<DistributionSet> assignedToDistributionSet;

View File

@@ -58,15 +58,12 @@ public class JpaDistributionSetType extends AbstractJpaTypeEntity implements Dis
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@CascadeOnDelete @OneToMany(mappedBy = "dsType", targetEntity = DistributionSetTypeElement.class, fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.REMOVE }, orphanRemoval = true)
@OneToMany(mappedBy = "dsType", targetEntity = DistributionSetTypeElement.class, cascade = {
CascadeType.PERSIST }, fetch = FetchType.EAGER, orphanRemoval = true)
private Set<DistributionSetTypeElement> elements; private Set<DistributionSetTypeElement> elements;
@Column(name = "deleted") @Column(name = "deleted")
private boolean deleted; private boolean deleted;
@CascadeOnDelete
@ManyToMany(mappedBy = "distributionSetTypes", targetEntity = JpaTargetType.class, fetch = FetchType.LAZY) @ManyToMany(mappedBy = "distributionSetTypes", targetEntity = JpaTargetType.class, fetch = FetchType.LAZY)
private List<TargetType> compatibleToTargetTypes; private List<TargetType> compatibleToTargetTypes;

View File

@@ -14,6 +14,7 @@ import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column; import jakarta.persistence.Column;
import jakarta.persistence.ConstraintMode; import jakarta.persistence.ConstraintMode;
import jakarta.persistence.Entity; 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.TargetFilterQuery;
import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus;
import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder; 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.ConversionValue;
import org.eclipse.persistence.annotations.Convert; import org.eclipse.persistence.annotations.Convert;
import org.eclipse.persistence.annotations.ObjectTypeConverter; 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"; private static final String DELETED_PROPERTY = "deleted";
@CascadeOnDelete @OneToMany(targetEntity = JpaRolloutGroup.class, fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, mappedBy = "rollout")
@OneToMany(targetEntity = JpaRolloutGroup.class, fetch = FetchType.LAZY, mappedBy = "rollout")
private List<JpaRolloutGroup> rolloutGroups; private List<JpaRolloutGroup> rolloutGroups;
@Column(name = "target_filter", length = TargetFilterQuery.QUERY_MAX_SIZE, nullable = false) @Column(name = "target_filter", length = TargetFilterQuery.QUERY_MAX_SIZE, nullable = false)

View File

@@ -36,7 +36,6 @@ import org.eclipse.hawkbit.repository.model.Rollout;
import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.RolloutGroup;
import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus;
import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder; 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.ConversionValue;
import org.eclipse.persistence.annotations.Convert; import org.eclipse.persistence.annotations.Convert;
import org.eclipse.persistence.annotations.ObjectTypeConverter; import org.eclipse.persistence.annotations.ObjectTypeConverter;
@@ -72,8 +71,7 @@ public class JpaRolloutGroup extends AbstractJpaNamedEntity implements RolloutGr
@Convert("rolloutgroupstatus") @Convert("rolloutgroupstatus")
private RolloutGroupStatus status = RolloutGroupStatus.CREATING; private RolloutGroupStatus status = RolloutGroupStatus.CREATING;
@CascadeOnDelete @OneToMany(mappedBy = "rolloutGroup", fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.REMOVE }, targetEntity = RolloutTargetGroup.class)
@OneToMany(mappedBy = "rolloutGroup", fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST }, targetEntity = RolloutTargetGroup.class)
private List<RolloutTargetGroup> rolloutTargetGroup; private List<RolloutTargetGroup> rolloutTargetGroup;
// No foreign key to avoid to many nested cascades on delete which some DBs cannot handle // No foreign key to avoid to many nested cascades on delete which some DBs cannot handle

View File

@@ -46,7 +46,6 @@ import org.eclipse.hawkbit.repository.model.DistributionSet;
import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModule;
import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.SoftwareModuleType;
import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder; import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder;
import org.eclipse.persistence.annotations.CascadeOnDelete;
import org.eclipse.persistence.descriptors.DescriptorEvent; import org.eclipse.persistence.descriptors.DescriptorEvent;
import org.eclipse.persistence.queries.UpdateObjectQuery; import org.eclipse.persistence.queries.UpdateObjectQuery;
import org.eclipse.persistence.sessions.changesets.DirectToFieldChangeRecord; import org.eclipse.persistence.sessions.changesets.DirectToFieldChangeRecord;
@@ -82,9 +81,7 @@ public class JpaSoftwareModule extends AbstractJpaNamedVersionedEntity implement
@NotNull @NotNull
private JpaSoftwareModuleType type; private JpaSoftwareModuleType type;
@CascadeOnDelete @OneToMany(fetch = FetchType.LAZY, mappedBy = "softwareModule", cascade = { CascadeType.PERSIST, CascadeType.REMOVE }, targetEntity = JpaArtifact.class, orphanRemoval = true)
@OneToMany(fetch = FetchType.LAZY, mappedBy = "softwareModule", cascade = {
CascadeType.PERSIST }, targetEntity = JpaArtifact.class, orphanRemoval = true)
private List<JpaArtifact> artifacts; private List<JpaArtifact> artifacts;
@Setter @Setter
@@ -97,8 +94,7 @@ public class JpaSoftwareModule extends AbstractJpaNamedVersionedEntity implement
private boolean encrypted; private boolean encrypted;
@ToString.Exclude @ToString.Exclude
@CascadeOnDelete @OneToMany(mappedBy = "softwareModule", fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, targetEntity = JpaSoftwareModuleMetadata.class)
@OneToMany(mappedBy = "softwareModule", fetch = FetchType.LAZY, targetEntity = JpaSoftwareModuleMetadata.class)
private List<JpaSoftwareModuleMetadata> metadata; private List<JpaSoftwareModuleMetadata> metadata;
@Column(name = "locked") @Column(name = "locked")
@@ -109,8 +105,7 @@ public class JpaSoftwareModule extends AbstractJpaNamedVersionedEntity implement
@ToString.Exclude @ToString.Exclude
@Getter(AccessLevel.NONE) @Getter(AccessLevel.NONE)
@CascadeOnDelete @ManyToMany(mappedBy = "modules", targetEntity = JpaDistributionSet.class, fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE })
@ManyToMany(mappedBy = "modules", targetEntity = JpaDistributionSet.class, fetch = FetchType.LAZY)
private List<DistributionSet> assignedTo; private List<DistributionSet> assignedTo;
/** /**

View File

@@ -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.SystemSecurityContextHolder;
import org.eclipse.hawkbit.repository.model.helper.TenantConfigurationManagementHolder; import org.eclipse.hawkbit.repository.model.helper.TenantConfigurationManagementHolder;
import org.eclipse.hawkbit.security.SystemSecurityContext; import org.eclipse.hawkbit.security.SystemSecurityContext;
import org.eclipse.persistence.annotations.CascadeOnDelete;
import org.eclipse.persistence.annotations.ConversionValue; import org.eclipse.persistence.annotations.ConversionValue;
import org.eclipse.persistence.annotations.Convert; import org.eclipse.persistence.annotations.Convert;
import org.eclipse.persistence.annotations.ObjectTypeConverter; 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") @Pattern(regexp = "[\\S]*", message = "has whitespaces which are not allowed")
private String controllerId; private String controllerId;
@CascadeOnDelete @OneToMany(mappedBy = "target", fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, targetEntity = JpaAction.class)
@OneToMany(mappedBy = "target", fetch = FetchType.LAZY, targetEntity = JpaAction.class)
private List<JpaAction> actions; private List<JpaAction> actions;
/** /**
@@ -109,8 +107,7 @@ public class JpaTarget extends AbstractJpaNamedEntity implements Target, EventAw
@NotNull @NotNull
private String securityToken; private String securityToken;
@CascadeOnDelete @OneToMany(mappedBy = "target", fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.REMOVE })
@OneToMany(mappedBy = "target", fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST })
private List<RolloutTargetGroup> rolloutTargetGroup; private List<RolloutTargetGroup> rolloutTargetGroup;
@Column(name = "address", length = Target.ADDRESS_MAX_SIZE) @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")) @JoinColumn(name = "target_type", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_target_relation_target_type"))
private TargetType targetType; private TargetType targetType;
@CascadeOnDelete @ManyToMany(cascade = { CascadeType.REMOVE }, targetEntity = JpaTargetTag.class)
@ManyToMany(targetEntity = JpaTargetTag.class)
@JoinTable( @JoinTable(
name = "sp_target_target_tag", name = "sp_target_target_tag",
joinColumns = { joinColumns = {
@@ -172,7 +168,7 @@ public class JpaTarget extends AbstractJpaNamedEntity implements Target, EventAw
/** /**
* Supplied / committed by the controller. Read-only via management API. * 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 @ElementCollection
@Column(name = "attribute_value", length = Target.CONTROLLER_ATTRIBUTE_VALUE_SIZE) @Column(name = "attribute_value", length = Target.CONTROLLER_ATTRIBUTE_VALUE_SIZE)
@MapKeyColumn(name = "attribute_key", nullable = false, length = Target.CONTROLLER_ATTRIBUTE_KEY_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")) foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_targ_attrib_target"))
private Map<String, String> controllerAttributes; private Map<String, String> controllerAttributes;
@CascadeOnDelete @OneToMany(mappedBy = "target", fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, targetEntity = JpaTargetMetadata.class)
@OneToMany(mappedBy = "target", fetch = FetchType.LAZY, targetEntity = JpaTargetMetadata.class)
private List<TargetMetadata> metadata; private List<TargetMetadata> metadata;
/** /**

View File

@@ -33,7 +33,6 @@ import org.eclipse.hawkbit.repository.model.DistributionSetType;
import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.Target;
import org.eclipse.hawkbit.repository.model.TargetType; import org.eclipse.hawkbit.repository.model.TargetType;
import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder; import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder;
import org.eclipse.persistence.annotations.CascadeOnDelete;
import org.eclipse.persistence.descriptors.DescriptorEvent; import org.eclipse.persistence.descriptors.DescriptorEvent;
/** /**
@@ -51,7 +50,6 @@ public class JpaTargetType extends AbstractJpaTypeEntity implements TargetType,
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@CascadeOnDelete
@ManyToMany(targetEntity = JpaDistributionSetType.class) @ManyToMany(targetEntity = JpaDistributionSetType.class)
@JoinTable( @JoinTable(
name = "sp_target_type_ds_type_relation", name = "sp_target_type_ds_type_relation",

View File

@@ -1807,7 +1807,6 @@ class RolloutManagementTest extends AbstractJpaIntegrationTest {
@Expect(type = TargetCreatedEvent.class, count = 25), @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetCreatedEvent.class, count = 25), @Expect(type = TargetUpdatedEvent.class, count = 2),
@Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1),
@Expect(type = RolloutGroupCreatedEvent.class, count = 5), @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 = ActionCreatedEvent.class, count = 10), @Expect(type = ActionUpdatedEvent.class, count = 2),
@Expect(type = RolloutDeletedEvent.class, count = 1), @Expect(type = RolloutDeletedEvent.class, count = 1),
@Expect(type = RolloutCreatedEvent.class, count = 1) }) @Expect(type = RolloutCreatedEvent.class, count = 1) })