2017-01-15 10 views
0

私は次のような状況があります。JPA - ManyToOne - JoinTable - フィールドを更新することはできません

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; 

私は、オブジェクトAnagraficaIscrittiとオブジェクトのニュースレターを作成しようとすると、レコードが自動的にIscrizioniEmailにも挿入されています。例えば、私が作成します。

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 

しかし、nullである(現在のタイムスタンプ付き)SUBSCRIPTION_DATEを更新する正しい方法は、何ですか?オブジェクトIscrizioniEmailを作成しようとすると、キーの重複エラーなどが発生します。

+0

'@ Entity'クラス' IscrizioniEmail'を作成しようとしましたか? – alayor

+0

私は分かりません。エンティティクラスIscrizioniEmailが存在します。 – pacionet

+0

ありがとう、既定値を定義します。 'SUBSCRIPTION_DATE' DATETIME DEFAULT NOW() JPAは時には非常に複雑だと思います。 – pacionet

答えて

0

テーブルのSUBSCRIPTION_DATEのデフォルト値を現在の日付に設定できます。そのため、Javaから送信する必要はありません。

Javaからその値を送信する必要がある場合は、およびAnagraficaIscrittiテーブルに挿入した直後に、IscrizioniEmailエンティティクラスを使用して更新クエリを実行できます。

関連する問題