2015-04-19 2 views
0

J'ai les entités suivantes. Contact. La personne. Organisation. et Telefoon (Téléphone en anglais).entitymanager ne persistera pas tous les téléphones pour le contact

Une personne et une organisation sont toutes deux des contacts. ils héritent de Contact.

Un contact peut avoir un ou plusieurs numéros de téléphone. Donc, une liste de Telefoon.

Une organisation a également un contactPerson de la personne type. Le problème est que si je persiste Objets Person et Objets d'organisation, qui ont tous deux numéros pour chaque objet, que pour certains objets seulement 1 numéro de téléphone persiste dans la base de données? Comment c'est ?

Je sais que cela a à voir avec mes annotations et ma configuration de mes cours.

le contact de classe

@Entity 
@Table(name= "Contact") 
@Inheritance(strategy = InheritanceType.JOINED) 
@XmlRootElement 
public class Contact implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 

    private String naam; 
    @Embedded 
    private Adres adres; 

    public Contact() {} 

    @OneToMany(mappedBy="contact", orphanRemoval=true,cascade = CascadeType.ALL) 
    @XmlElement 
    private List<Telefoon> telefoons=new ArrayList<>(); 

La classe Personne

@Entity 
@Table(name="Persoon") 
@Inheritance(strategy= InheritanceType.JOINED) 
public class Persoon extends Contact implements Serializable{ 
    @Convert(converter=LocalDatePersistenceConverter.class) 
    private LocalDate geboorteDatum; 

    protected Persoon() {} 

@OneToMany(mappedBy="contactPersoon",orphanRemoval=true,cascade = CascadeType.ALL)  
     private List<Organisatie> Organisaties; 

L'Organisation de la classe:

@Entity 
@Inheritance(strategy = InheritanceType.JOINED) 
public class Organisatie extends Contact implements Serializable{ 
    protected Organisatie() {} 

    @JoinColumn(name = "persoonid") 
    @ManyToOne(cascade=CascadeType.ALL) 
    private Persoon contactPersoon; 

classe Telefoon (Téléphone en anglais)

@Entity 
@Table(name = "Telefoon") 
public class Telefoon implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 


    @Column(name = "nummer") 
    private String nummer; 
    @Column(name = "naam") 
    private String naam; 

    @JoinColumn(name = "contactid") 
    @ManyToOne 
    private Contact contact; 

Je persiste mes objets de cette façon:

persoon1.addTelefoon(new Telefoon("Huis","092243851")); 
persoon1.addTelefoon(new Telefoon("Mobiel","0478451226")); 
persoon2.addTelefoon(new Telefoon("Huis","095547812")); 
persoon2.addTelefoon(new Telefoon("Mobiel","0425154578")); 
persoon3.addTelefoon(new Telefoon("Huis","097784152")); 
persoon3.addTelefoon(new Telefoon("Mobiel","0478221144")); 
persoon4.addTelefoon(new Telefoon("Huis","095862314")); 
persoon4.addTelefoon(new Telefoon("Mobiel","0423887799")); 
persoon5.addTelefoon(new Telefoon("Huis","097841526")); 
persoon5.addTelefoon(new Telefoon("Mobiel","0478220033")); 
contactpersoon1.addTelefoon(new Telefoon("Huis","092261236")); 
contactpersoon1.addTelefoon(new Telefoon("Mobiel","0499150327")); 
contactpersoon2.addTelefoon(new Telefoon("Huis","097842615")); 
contactpersoon2.addTelefoon(new Telefoon("Mobiel","0499369101")); 
contactpersoon3.addTelefoon(new Telefoon("Huis","091142563")); 
contactpersoon3.addTelefoon(new Telefoon("Mobiel","0452119987")); 
organisatie1.addTelefoon(new Telefoon("Huis","094578956")); 
organisatie1.addTelefoon(new Telefoon("Mobiel","0488125200")); 
organisatie2.addTelefoon(new Telefoon("Huis","091247653")); 
organisatie2.addTelefoon(new Telefoon("Mobiel","0487930287")); 
organisatie3.addTelefoon(new Telefoon("Huis","09784561346")); 
organisatie3.addTelefoon(new Telefoon("Mobiel","0476112233")); 
em.getTransaction().begin(); 
em.persist(persoon1); 
em.persist(persoon2); 
em.persist(persoon3); 
em.persist(persoon4); 
em.persist(persoon5); 
em.persist(organisatie1); 
em.persist(organisatie2); 
em.persist(organisatie3); 
em.merge(contactpersoon1); 
em.merge(contactpersoon2); 
em.merge(contactpersoon3); 
em.getTransaction().commit(); 

, mais la base de données ne sera pas montrer tous et numéros mobiles! Certains sont oubliés!

Des pensées?

Thanx

+0

Qui persiste avec succès et qui ne le fait pas? –

Répondre

0

J'ai trouvé la réponse. Glassfish rencontre des problèmes pour enregistrer des dates dans des bases de données.

La propriété date de la classe Person est convertie Par une classe, j'ai écrit la mienne. Juste pour éditer le balisage de la date dans la base de données.

Il semble que glassfish ne pouvait pas gérer cela. J'ai également supprimé le oneToMany avec la liste des Organisatie (organisation).

ceci:

@Entity 
@Table(name="Persoon") 
@Inheritance(strategy= InheritanceType.JOINED) 
public class Persoon extends Contact implements Serializable{ 
    @Convert(converter=LocalDatePersistenceConverter.class) 
    private LocalDate geboorteDatum; 

    protected Persoon() {} 

@OneToMany(mappedBy="contactPersoon",orphanRemoval=true,cascade = CascadeType.ALL)  
     private List<Organisatie> Organisaties; 

est maintenant ceci:

@Entity 
@XmlRootElement 
public class Persoon extends Contact implements Serializable { 


    @Temporal(DATE) 
    private Date geboorteDatum; 

    public Persoon() { 
    } 
} 

Tout fonctionne bien maintenant! Thanx