Ma base de données est générée depuis mes classes.
La relation OneToMany sur des Documents dans la classe Person génère une table person_documents dans la base de données. Je ne pense pas qu'il est possible d'éviter ça.
Normalement il est possible de définir la relation OneToMany que d'un seul coté ?
Dans la base je comprend aisément que cela nécéssite une table d'association, mais au niveau du java il n'y a pas besoin de gérer l'association des 2 cotés....
Qu'entendez-vous par PersonDocument ? une nouvelle classe qui hérite de Document ?
J'essaye donc de passer par une relation ManyToMany. Voici mes classes mises a jour:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| @Entity
@Table(name = "document")
@Inheritance(strategy = InheritanceType.JOINED)
public class Document implements Serializable
{
@ManyToMany(mappedBy = "documents", fetch = FetchType.LAZY)
Collection<Person> persons = new ArrayList<Person>();
...
}
@Entity
@Table(name = "person")
@NamedQueries(
{
@NamedQuery(name = "findPersons", query = "SELECT p FROM Person p") })
public class Person implements Serializable
{
/**
*
*/
@ManyToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
protected Collection<Document> documents = new ArrayList<Document>();
...
} |
Je ne peux pas utiliser FetchType.LAZY dans Person sinon j'ai une exception:
Exception in thread "AWT-EventQueue-0" org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: echo.parcel.be.Person.documents, no session or session was closed
Même avec cette solution, la liste de documents associée à une personne après avoir utilisé la requête "findPersons" est toujours vide...
Merci