2017-01-15 4 views
0

je la situation suivante:JPA - ManyToOne - joinTable - ne peut pas mettre à jour un champ

AnagraficaIscritti.java

@Entity 
@Table(name="ANAGRAFICA_ISCRITTI") 
public class AnagraficaIscritti implements Serializable { 
     private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name="ID_EMAIL",insertable=false, updatable=false) 
    private long idEmail; 

    private String email; 

    //bi-directional many-to-many association to Newsletter 
    @ManyToMany(mappedBy="anagraficaIscrittis") 
    private List<Newsletter> newsletters; 

    //bi-directional many-to-one association to IscrizioniEmail 
    @OneToMany(mappedBy="anagraficaIscritti") 
    private List<IscrizioniEmail> iscrizioniEmails; 

Newsletter.java

@Entity 
@Table(name="NEWSLETTER") 
public class Newsletter implements Serializable { 
     private static final long serialVersionUID = 1L; 

     @Id 
     @GeneratedValue(strategy = GenerationType.IDENTITY) 
     @Column(name="ID_NEWSLETTER") 
     private long idNewsletter; 

     //bi-directional many-to-many association to AnagraficaIscritti 
     @ManyToMany 
     @JoinTable(
      name="ISCRIZIONI_EMAIL" 
      , joinColumns={ 
       @JoinColumn(name="ID_NEWSLETTER") 
       } 
      , inverseJoinColumns={ 
       @JoinColumn(name="ID_EMAIL") 
       } 
      ) 
     private List<AnagraficaIscritti> anagraficaIscrittis; 

     //bi-directional many-to-one association to IscrizioniEmail 
     @OneToMany(mappedBy="newsletter") 
     private List<IscrizioniEmail> iscrizioniEmails; 

IscrizioniEmail.java

@Entity 
@Table(name="iscrizioni_email") 
public class IscrizioniEmail implements Serializable { 
     private static final long serialVersionUID = 1L; 


     @EmbeddedId 
     private IscrizioniEmailPK id; 

     @Temporal(TemporalType.TIMESTAMP) 
     @Column(name="SUBSCRIPTION_DATE") 
     private Date subscriptionDate; 

     //bi-directional many-to-one association to AnagraficaIscritti 
     @ManyToOne 
     @JoinColumn(name="ID_EMAIL",insertable = false, updatable = false) 
     private AnagraficaIscritti anagraficaIscritti; 

     //bi-directional many-to-one association to Newsletter 
     @ManyToOne 
     @JoinColumn(name="ID_NEWSLETTER", insertable = false, updatable = false) 
     private Newsletter newsletter; 

IscrizioniEmailPK.java

@Embeddable 
public class IscrizioniEmailPK implements Serializable { 
     //default serial version id, required for serializable classes. 
     private static final long serialVersionUID = 1L; 

     @Column(name="ID_EMAIL", insertable=false, updatable=false) 
     private long idEmail; 

     @Column(name="ID_NEWSLETTER", insertable=false, updatable=false) 
     private long idNewsletter; 

Quand j'ai essayé de créer un objet AnagraficaIscritti et un bulletin d'objet, un enregistrement est automatiquement inséré aussi dans IscrizioniEmail. Par exemple, je crée:

ANAGRAFICA_ISCRITTI 
ID_EMAIL   EMAIL 
    1   [email protected] 

NEWSLETTER 
ID_NEWSLETTER  NEWSLETTER 
     1    sport 

ISCRIZIONI_EMAIL 
    ID_EMAIL ID_NEWSLETTER SUBSCRIPTION_DATE 
    1    1    NULL 

Mais quelle est la bonne façon de mettre à jour SUBSCRIPTION_DATE (avec l'horodatage en cours), ce qui est nul? Si je tente de créer un objet IscrizioniEmail j'ai eu des erreurs clés et dupliquer ainsi de suite.

+0

Avez-vous essayé de créer un '@ classe Entity'' IscrizioniEmail'? – alayor

+0

Je ne comprends pas. La classe d'entité IscrizioniEmail existe. – pacionet

+0

Merci, définir une valeur par défaut fonctionne: 'SUBSCRIPTION_DATE' DATETIME DEFAULT NOW() Je pense que JPA est parfois très compliqué. – pacionet

Répondre

0

Vous pouvez définir une valeur par défaut pour SUBSCRIPTION_DATE dans votre table ISCRIZIONI_EMAIL, dont la valeur correspond à la date actuelle. Vous n'avez donc pas besoin de l'envoyer depuis Java.

Si vous devez envoyer cette valeur depuis Java, vous pouvez exécuter une requête de mise à jour en utilisant la classe d'entité IscrizioniEmail juste après l'insertion dans les tables Newsletter et AnagraficaIscritti.