Supprimer avec une relation oneToMany?
Résolu
ZiLu
Messages postés
18
Date d'inscription
Statut
Membre
Dernière intervention
-
choubaka Messages postés 39442 Date d'inscription Statut Modérateur Dernière intervention -
choubaka Messages postés 39442 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Ja'i fait une application simple en Java Web (ZK) avec Persistance (Hibernate).
J'ai 2 Entités de bean: Country.java et Continent.java
Ils ont une relation oneToMany (un pays peut avoir un continent, un continent peut avoir plusieurs pays).
Voici le code de mes 2 classes:
Mon problème est que, quand je fais une requête pour supprimer un pays, le continent est supprimé avec!
Voici la rêquete si ca peut vous aider...:
Quelqu'un peut-il m'aider et m'indiquer comment on efface que le pays?
N'hésitez pas à me demander plus d'informations si vous en avez besoin.
Merci d'avance
Ja'i fait une application simple en Java Web (ZK) avec Persistance (Hibernate).
J'ai 2 Entités de bean: Country.java et Continent.java
Ils ont une relation oneToMany (un pays peut avoir un continent, un continent peut avoir plusieurs pays).
Voici le code de mes 2 classes:
@Entity public class Continent implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @OneToMany(targetEntity = Country.class, mappedBy = "continent", cascade = CascadeType.ALL,fetch=FetchType.EAGER) private List<Country> countries = new ArrayList<Country>(); public Continent() { } public Continent(String name){ this.name=name; } //... puis les getter et setter
@Entity public class Country implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String name; private String shortName; @ManyToOne(cascade=CascadeType.ALL, optional=false) private Continent continent; public Country() { } public Country(String name, String shortName, Continent continent){ this.name=name; this.shortName=shortName; this.continent=continent; } //... puis les getter et setter
Mon problème est que, quand je fais une requête pour supprimer un pays, le continent est supprimé avec!
Voici la rêquete si ca peut vous aider...:
public <T> T remove(Class<T> clazz, Serializable id) throws EntityNotFoundException { T instance = findById(clazz, id); entityManager.remove(instance); return instance; }
Quelqu'un peut-il m'aider et m'indiquer comment on efface que le pays?
N'hésitez pas à me demander plus d'informations si vous en avez besoin.
Merci d'avance
A voir également:
- Supprimer avec une relation oneToMany?
- Supprimer rond bleu whatsapp - Guide
- Supprimer une page word - Guide
- Comment supprimer une application préinstallée sur android - Guide
- Supprimer pub youtube - Accueil - Streaming
- Fichier impossible à supprimer - Guide
2 réponses
Salut
Je crois que c'est à cause du fait que tu passes en argument ce fameux continent. Il a toujours un pointeur dessus lorsque tu supprimes un pays.
Tes pays se retrouvent dans un arraylist dans un continent, est-il nécessaire d'avoir l'objet continent dans les attributs d'un pays ? Est-ce que le nom du continent ne serait pas suffisant, voire même utile ?
Perso, je me contenterais de gérer mes pays au sein du Continent.
En toute logique
Europe contient un arraylist avec X pays
Si je veux supprimer un pays, je prends l'instance du continent et à l'aide d'une méthode contenant l'argument String du pays et j'agis sur la gestion de l'Arraylist..
Je crois que c'est à cause du fait que tu passes en argument ce fameux continent. Il a toujours un pointeur dessus lorsque tu supprimes un pays.
Tes pays se retrouvent dans un arraylist dans un continent, est-il nécessaire d'avoir l'objet continent dans les attributs d'un pays ? Est-ce que le nom du continent ne serait pas suffisant, voire même utile ?
Perso, je me contenterais de gérer mes pays au sein du Continent.
En toute logique
Europe contient un arraylist avec X pays
Si je veux supprimer un pays, je prends l'instance du continent et à l'aide d'une méthode contenant l'argument String du pays et j'agis sur la gestion de l'Arraylist..
C'est bon j'ai trouvé la solution.
Enfait il fallait faire une table de relation, comme ca si j'efface un pays, le continent reste.
Dans country:
Dans continent:
Enfait il fallait faire une table de relation, comme ca si j'efface un pays, le continent reste.
Dans country:
@ManyToOne(optional=true) @JoinTable(name = "continentPays", joinColumns = { @JoinColumn(name="countryId") }, inverseJoinColumns = { @JoinColumn(name="continentId") } ) private Continent continent;
Dans continent:
@OneToMany(cascade = CascadeType.ALL) @JoinTable(name = "continentPays", joinColumns = { @JoinColumn(name="continentId", unique = true)}, inverseJoinColumns = { @JoinColumn(name="countryId")}) private List<Country> countries = new ArrayList<Country>();
Je vais essayer de faire de ta façon, mais le problème est que j'utilise ZK, qui lui va faire une recherche par rapport aux pays, donc il me faut ce lien... Mais je vais essayer de faire autrement
En tout cas ca m'a aidé, thx :)