Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用jpa映射多对多关系和可嵌入类_Java_Jpa_Many To Many - Fatal编程技术网

Java 用jpa映射多对多关系和可嵌入类

Java 用jpa映射多对多关系和可嵌入类,java,jpa,many-to-many,Java,Jpa,Many To Many,我在我的应用程序中使用EJB3和JPA2,我有两个实体,它们有许多to关系,我想将它们持久化,但幸运的是,经过数小时的仔细研究和尝试,我无法做到这一点,因此这是我的代码: @Entity public class Destinataire implements Serializable { @Id @Basic(optional = false) @Size(min = 1, max = 50) @Column(name = "ADRESSE") pri

我在我的应用程序中使用EJB3和JPA2,我有两个实体,它们有许多to关系,我想将它们持久化,但幸运的是,经过数小时的仔细研究和尝试,我无法做到这一点,因此这是我的代码:

@Entity
public class Destinataire implements Serializable {

    @Id
    @Basic(optional = false)
    @Size(min = 1, max = 50)
    @Column(name = "ADRESSE")
    private String adresse;
    @OneToMany(mappedBy = "destinataire")
    private Set<Envois> envoisSet;

//getters and setters
}

@Entity
public class Envois implements Serializable {

    @EmbeddedId
    protected EnvoisPK envoisPK = new EnvoisPK();
    @Size(max = 4)
    @Column(name = "TYPENVOIS")
    private String typenvois;
    @JoinColumn(name = "IDMAIL", referencedColumnName = "IDMAIL", insertable = false, updatable = false)
    @ManyToOne(optional = false)
    private MailAEnvoyer mailAEnvoyer;
    @JoinColumn(name = "ADRESSE", referencedColumnName = "ADRESSE", insertable = false, updatable = false)
    @ManyToOne(optional = false)
    private Destinataire destinataire;
}

@Embeddable
public class EnvoisPK implements Serializable {

    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 255)
    @Column(name = "ADRESSE")
    private String adresse;
    @Basic(optional = false)
    @NotNull
    @Column(name = "IDMAIL")
    private BigDecimal idmail;
}

@Entity
@Table(name = "MAILAENVOYER")
public class MailAEnvoyer implements Serializable {

    private static final long serialVersionUID = 1L;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Id
    @Basic(optional = false)
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name = "IDMAIL")
    private BigDecimal idmail;



    @JoinTable(name = "ENVOIS", joinColumns = {
        @JoinColumn(name = "IDMAIL", referencedColumnName = "IDMAIL")}, inverseJoinColumns = {
        @JoinColumn(name = "ADRESSE", referencedColumnName = "ADRESSE")})
    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
    private Set<Destinataire> destinataireSet;
    @OneToMany(mappedBy = "mailAEnvoyer", cascade = CascadeType.ALL)
    private Set<Envois> envoisSet;
}
但我总是得到一个例外,EnvoisPK的address和idmail为null

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLIntegrityConstraintViolationException: ORA-01400: cannot insert NULL into ("MAILING"."ENVOIS"."IDMAIL")
Error Code: 1400
Call: INSERT INTO ENVOIS (TYPENVOIS, IDMAIL, ADRESSE) VALUES (?, ?, ?)
    bind => [3 parameters bound]
Query: InsertObjectQuery(entities.Envois[ envoisPK=entities.EnvoisPK[ adresse=null, idmail=null ] ])

您可以使用以下方法在实体MaileEnvoyer中添加:

@PostPersist
public void postPersist() {
    for (Envois e : envoisSet) {
        e.getEnvoisPK().setIdmail(this.getIdmail());
    }

}

当您询问异常时,至少必须发布完整的异常堆栈跟踪。
@PostPersist
public void postPersist() {
    for (Envois e : envoisSet) {
        e.getEnvoisPK().setIdmail(this.getIdmail());
    }

}