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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/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
日食JPA一对一关系_Jpa_Eclipselink - Fatal编程技术网

日食JPA一对一关系

日食JPA一对一关系,jpa,eclipselink,Jpa,Eclipselink,我正试图用EclipseLink JPA和MySQL建立一个简单的一对一关系模型。它失败并显示一些错误消息。有人能帮我理解它遗漏了什么吗 @Entity public class Job implements Serializable { @Id @GeneratedValue private long jobId; @OneToMany(targetEntity=Applicant.class,mappedBy="job",cascade=CascadeTyp

我正试图用EclipseLink JPA和MySQL建立一个简单的一对一关系模型。它失败并显示一些错误消息。有人能帮我理解它遗漏了什么吗

@Entity
public class Job implements Serializable {
    @Id
    @GeneratedValue
    private long jobId;

    @OneToMany(targetEntity=Applicant.class,mappedBy="job",cascade=CascadeType.ALL)
    private List<Applicant> applicant;

    //Gettters and Setters
}

@Entity
public class Applicant {
    @Id
    @GeneratedValue
    private long applicantId;


    @ManyToOne
    @JoinColumn(name="job_Id")
    private Job job;


    //Gettters and Setters
}   

您需要在
申请人
表中有一个外键列

您已经用
@JoinColumn(name=“Job\u Id”)
注释了与
作业的关系
@JoinColumn
是不必要的,因为JPA完全是约定优先于配置的,这意味着如果您不重写默认值,就会隐含默认值。如果没有此注释,EclipseLink将搜索名为
job\u jobId
\u
)的列。因为您声明了join列是
job\u Id
,所以您需要在
applicator
表中设置该列

以下是应与实体映射(使用
@JoinColumn(name=“job\u Id”)
)一起使用的数据库表:

@实体
公共类作业实现可序列化{
@身份证
@生成值
@列(name=“job\u id”)
私人长期工单;
@OneToMany(mappedBy=“job”,cascade=CascadeType.ALL)
私人名单申请人;
公职(){
申请人=新ArrayList();
}
公开名单申请者(){
//通过addapplicator()方法强制客户端封装关系双方的设置
退货托收。不可修改列表(申请人);
}
公共申请者(申请人){
//确定关系的双方
申请人。setJob(本);
申请人。添加(申请人);
}
}
@实体
公开课申请人{
@身份证
@生成值
私人长期申请;
@许多酮
@JoinColumn(name=“job\u Id”)
私人工作;
}   
作业=新作业();
申请人=新申请人();
职位。添加申请人(申请人);
em.persist(job);

您是否在表
申请人
中有
job\u Id
列?我听说它不是必需的,我们可以提供任何名称。我删除了@join列。这里有一条新的错误消息:无法添加或更新子行:外键约束失败(
mydb
applicator
,CONSTRAINT
FK\u applicationId
外键(
applicationId
)引用
job
JOBID
)生成的SQL:INSERT INTO job(JOBID)值(?)bind=>[2401]INSERT INTO applicationer(applicationId,job\u JOBID)值(?),bind=>[2402,null]为什么在第二次插入中未填充JOB_JOBID?您需要将
申请人.setJob(JOB)
添加到代码中。
Job job=new Job ();
List <Applicant> applicants=new ArrayList<Applicant>();
Applicant applicant=new Applicant();
applicants.add(applicant);
job.setApplicant(applicants);
em.persist(job);// EntityManager Reff   
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'job_Id' in 'field list'
TABLE JOB
    JOBID (PRIMARY KEY)

TABLE APPLICANT
    APPLICANTID (PRIMARY KEY)
    JOB_ID (FOREIGN KEY TO JOB#JOBID)
@Entity
public class Job implements Serializable{

        @Id
        @GeneratedValue
        @Column(name="job_id")
        private long jobId;

        @OneToMany(mappedBy="job",cascade=CascadeType.ALL)
        private List<Applicant> applicants;

        public Job(){
            applicants = new ArrayList<Applicant>();
        }

        public List<Applicant> getApplicants(){
            //force clients through addApplicant() method to encapsulate setting both sides of relationship
            return Collections.unmodifiableList(applicants);
        }

        public void addApplicant(Applicant applicant){
            //set both sides of relationship
            applicant.setJob(this);
            applicants.add(applicant);
        }
    }

    @Entity
    public class Applicant {
        @Id
        @GeneratedValue
        private long applicantId;


        @ManyToOne
        @JoinColumn(name="job_Id")
        private Job job;
    }   


    Job job = new Job ();
    Applicant applicant = new Applicant();
    job.addApplicant(applicant);
    em.persist(job);