J'ai deux entités:Spring JPA: Empêcher la suppression si les relations existent encore
Tableau activité:
|id|milestone_id|..|
| 1|3 |..|
| 2|3 |..|
Classe:
@Entity
@Table(name="activity")
public class Activity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(nullable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;
@ManyToOne(optional = false)
private Milestone milestone;
}
et une table étape:
|id|..|
| 3|..|
Classe:
@Entity
@Table(name="milestone")
public class Milestone implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@Column(nullable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;
@JsonIgnore
@OneToMany(fetch = FetchType.LAZY, mappedBy = "milestone")
private List<Activity> activities = new ArrayList<>();
}
Maintenant, lorsque je supprime une étape 3, mon activité de sont conservés intacts. Toutefois, le paramètre milestone_id pointe toujours vers le jalon associé qui a déjà été supprimé.
Maintenant, lorsque je récupère les activités à nouveau je reçois cette erreur:
javax.persistence.EntityNotFoundException: Unable to find nl.geodan.vergunningen.manager.domain.Milestone with id 3
me semble logique. Ce que je veux cependant c'est que le jalon ne peut pas être supprimé, car le milestone_id
sur la table d'activité est optional = false
.
Qu'est-ce que j'ai manqué? Dois-je recharger les activités? Dois-je utiliser une sorte de CascadeType?
Le point est que vous ne voulez pas laisser supprimer objet 'Milestone' en cas de' Activity' montrant, oui? –
@MaciejDobrowolski oui, je veux l'empêcher de se produire – codesmith
Utiliser une clé étrangère entre les tables ne fonctionnerait pas? – Paolof76