java - hibernate 使用 apache-poi 在外键字段中插入空值

标签 java spring-boot apache-poi

我有 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/

相关文章:

java - 正则表达式向前将字符串分隔成标记

java - 保留数组中的默认值?

Java 数组 : Sorting scores and displaying with proper name

java - Spring MVC 和 Apache POI 创建 xls 文档。无法保存模型中新创建的文件

java - 如何使用 Apache POI 将现有 Excel 工作表中的一行复制到新的 Excel 工作表?

java - super() 只能从子类构造函数中调用吗? | java

spring-boot - 如何在Kubernetes中运行Spring Boot集成测试

java - 预期 Mockito 测试异常

hibernate - 如何通过在Spring data jpa中连接来自不同数据库的2个表来运行 native 查询?

java - 使用 Apache-POI 获取 docx 的每个段落的行