Je rencontre des problèmes avec la génération DDL de Toplink Essentials. Je développe une application basée sur Glassfish 2.1 et j'utilise JPA pour la persistance.Contrôle de la génération DDL dans Toplink Essentials
J'ai un graphe d'objet dans lequel une entité mère de classe A est propriétaire d'un ensemble d'entités de la classe B. B sont en Entités mises plusieurs saveurs qui Modélisée à l'aide d'héritage. Une telle saveur est une entité composite de classe BC qui regroupe un ensemble de plusieurs autres entités. Tous les entits B dans un BC doivent aussi appartenir à la même entité A que B. Notez que tous les entits B d'une entité A ne doivent pas faire partie d'un BC composite, ils peuvent aussi être autonomes.
Donc, fondamentalement, que les cartes aux classes suivantes:
@Entity
class A {
@ManyToOne(mappedBy="owner", cascade = { CascadeType.PERSIST, CascadeType.REMOVE })
Set<B> bs;
}
@Entity
@Inheritance
abstract class B {
@Id
long id;
@ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.REMOVE })
A owner;
@ManyToOne(optional = true)
BC composite;
}
@Entity
class BC extends B {
@OneToMany(cascade = { CascadeType.PERSIST, CascadeType.REMOVE }, mappedBy = "composite")
Set<B> parts;
}
Lorsque TopLink génère le DDL pour cette hiérarchie d'objets crée toutes les clés étrangères comme prévu. Cependant, il ne définit pas de règles en cascade pour les contraintes.
Lorsque je tente maintenant de supprimer un graphe d'objet entier via une référence à la Une instance il peut y avoir des situations où TopLink ne parvient pas à éliminer correctement le graphique de la base de données. Lorsque toplink supprime une entité BC avant de supprimer les entités B contenues, la contrainte de clé étrangère pour la relation "composite" est violée.
Cette situation peut être corrigée en ajustant manuellement le produit à CASCADE DDL (ou SET NULL) sur la contrainte de clé étrangère pertinente qui est très bien pour un environnement de production. Ceci échoue cependant dans un environnement de test avec des bases de données en mémoire (Derby) où la génération de DDL est entièrement gérée par les éléments essentiels de toplink et conduit ainsi à la violation de contrainte décrite ci-dessus.
Existe-t-il un moyen d'influencer le processus de génération DDL de telle sorte que les règles de cascade requises soient correctement définies par les éléments essentiels du toplink?
Merci pour votre aide!