J'ai les entités suivantes et je dois supprimer les entrées ServiceRegistration et ServiceChannels lorsque je supprime l'enregistrement ServiceRegistration. Mais maintenant, si je supprime un enregistrement dans serviceregistration, il supprime les enregistrements dans le canal qui est la table de métadonnées.Spring MVC 3 Hibernate JPA Annotations onetomany et manytoone relations cascade delete
ServiceRegistration.Java
@OneToMany(cascade=CascadeType.ALL,fetch = FetchType.EAGER)
@JoinTable(name = "ServiceChannel", joinColumns = {
@JoinColumn(name="serviceid", unique = true)
},
inverseJoinColumns = {
@JoinColumn(name="channelid")
}
)
private List<Channels> channelsInvolved;
public List<Channels> getChannelsInvolved() {
return channelsInvolved;
}
public void setChannelsInvolved(List<Channels> channelsInvolved) {
this.channelsInvolved = channelsInvolved;
}
ServiceChannels.java
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column private int servicechannelid;
@ManyToOne
@JoinColumn(name = "serviceid")
private ServiceRegistration serviceRegistration;
@ManyToOne
@JoinColumn(name = "channelid")
private Channels channels;
Channels.java >> contient des méta-données
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column private int channelid;
@Column private String channelname;
@Override
public boolean equals(final Object obj) {
if (obj instanceof Channels) {
final Channels other = (Channels) obj;
if (other.getChannelid() == getChannelid()) {
return true;
}
}
return false;
}
S'il vous plaît aidez-moi comment faire cascade supprimer dans ce relation d'entité.
Je reçois cette clé error..Foreign (FK47A18582B04FBB38: mcp_service_mcp_servicechannel [serviceChannels_servicechannelid])) doit avoir le même nombre de colonnes que la clé primaire référencée (mcp_servicechannel [serviceid, channelid]) – Surez
J'ai modifié la réponse pour ajouter le côté propriétaire de la relation (attribut mappedBy). Ceci est nécessaire dans la relation OneToMany. –
J'ai fait les changements comme vous l'avez dit, quand je supprime un enregistrement de service sans aucun servicechannels, ça fonctionne très bien. Mais si j'ai un servicechannel pour un enregistrement de service, son lancer 'Impossible de supprimer l'enregistrement !!! La mise à jour par lot a renvoyé un nombre de lignes inattendu de ....'. Je vois la requête générée par hibernate comme Hibernate: supprimer de mcp_servicechannel où serviceid =? Hibernate: supprimer de mcp_servicechannel où servicechannelid =? – Surez