我有 2 个简单的域对象,如下所示......使用 Oracle 数据库
@Entity
@Table(name="rfpobject")
public class Rfpobject {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String ide;
private String unit;
private String rfpid;
private String requestid;
private String incoming;
@OneToMany(mappedBy = "rfpid",cascade=CascadeType.PERSIST)
private Set<AspsortObject> rfpide;
第二个对象是:
@Entity
@Table(name="aspsortobject")
public class AspsortObject {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "rfpid")
private Rfpobject rfpid;
private String requestid;
private String aspart;
private String aspname;
private String asporganisation;
private String aspsort;
保存在数据库的方法:
@PostMapping("/upload")
public void addaspsort(@RequestParam("file") MultipartFile file) throws IOException
{
ZipSecureFile.setMinInflateRatio(0);
FileInputStream f = (FileInputStream) file.getInputStream();
XSSFWorkbook workbook = new XSSFWorkbook(f);
XSSFSheet sheet = workbook.getSheetAt(0);
Row row;
for(int i=1; i<=sheet.getLastRowNum(); i++){
row = sheet.getRow(i);
System.out.println("aspsorttt");
AspsortObject aspsort = new AspsortObject();
Rfpobject rfpid = new Rfpobject();
rfpid.setRfpid(row.getCell(0).toString());
aspsort.setRfpid( rfpid);
aspsort.setRequestid(row.getCell(1).toString());
aspsort.setAspart(row.getCell(2).toString());
aspsort.setAspname(row.getCell(3).toString());;
aspsort.setAsporganisation(row.getCell(4).toString());
aspsort.setAspsort(row.getCell(5).toString());
aspr.save(aspsort);
}
}
}
出于某种原因,hibernate 在我的 models.AspsortObject 的 rpfid 外键字段中插入空值。我尝试改变层叠样式、生成策略,但没有任何效果。设置 nullable=false 会引发 error 。数据被插入,但在 AspsortObject.rfpid 中,值为空,请帮助我
最佳答案
我首先保存 Rfpobject,获取其 id,然后保存 AspsortObject。
我记得自己也曾为此苦苦挣扎,因为我认为我可以同时保存两者,并且 hibernate 可以为我做一切,我仍然认为这是可能的,但我不记得从头到尾的解决方案。
关于java - hibernate 使用 apache-poi 在外键字段中插入空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61502101/