一对多和多对一映射在数据库列中显示为null

时间:2016-09-01 08:42:40

标签: java mysql spring hibernate

我正在编写一个Web应用程序,我从格式化的客户端获取JSON对象:

var applicationForm = {
            projectTitle: "",
            applicantRow: [{
                nameApplicant: "",
                emailApplicant: "",
                departmentApplicant: ""
            }],
            experimentRow: [{
                lightOn: "",
                tempDay: "",
                ....
            }],
            startdate: "",
            enddate: ""
            ....
    }

现在我想将它存储在3个表中,即应用程序,申请人,实验条件,其中applicationId将作为申请人和实验条件表中的外键。

@Entity
public class Application {
   private long application_id;
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   public long getApplication_id() {
       return application_id;
   }
   ...
   private List<ExperimentalConditions> experimentRow;
   @OneToMany(targetEntity=ExperimentalConditions.class,mappedBy="application",
        cascade=CascadeType.ALL,fetch=FetchType.EAGER)
   public List<ExperimentalConditions> getExperimentRow() {
       return experimentRow;
   }
...

ExperminetalCondition类:

@Entity
public class ExperimentalConditions {
    private long experimental_id;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public long getExperimental_id() {
        return experimental_id;
    }
    ...(getter,setters for other variables)

    private Application application;
    @ManyToOne
    @JoinColumn(name = "applicationid")
    public Application getApplication() {
        return application;
    }
    ...(getter setters)

与申请人表格相同的设置 在我的applicationDAO类中,我将这个应用程序对象保存在表中,然后应该将其保存在3个不同的表中。

ApplicationDAO:

 public void save(Application applicationData){
     getSession().save(applicationData);
 }

这是我的控制器类,我在这里调用这个保存方法。

@RequestMapping(value="/submitApp",method=RequestMethod.POST)
public Application sumitApp(@RequestBody Application app ){
    try{
        applicationDAO.save(app);
    }

这为所有3个表中的applicationForm保存数据,但application_id(外键)在申请人和experimentalconditions表中显示为null。因此,如果我想要获取数据,我无法检索它。请告诉我我错在哪里。

1 个答案:

答案 0 :(得分:1)

根据您的关系所有者configuraiton,您需要从json字符串中获取ExperimentalConditions对象并在保存主应用程序数据之前编写此行

applicationData.getExperimentRow().setApplicaiton(applicationData);

为您的其他关系表(申请人)重复同样的事情