首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

Hibernate是一个开源的Java持久化框架,它提供了对象关系映射(ORM)的解决方案,可以将Java对象映射到关系型数据库中的表结构。Apache POI是一个用于操作Microsoft Office格式文件的Java库,可以读取、写入和修改Excel、Word和PowerPoint等文件。

在Hibernate中使用Apache POI插入空值到外键字段的步骤如下:

  1. 首先,确保你已经在项目中引入了Hibernate和Apache POI的相关依赖。
  2. 创建一个Java类,用于表示你要插入的数据对象。该类应该包含与数据库表中字段对应的属性。
  3. 使用Hibernate的注解或XML配置文件,将Java类映射到数据库表。确保外键字段的映射正确。
  4. 在代码中使用Apache POI创建一个Excel文件,并设置要插入的数据。
  5. 遍历数据集合,对于每个数据对象,使用Hibernate的Session对象进行保存操作。在保存之前,可以通过设置外键字段为空值来插入空值。

以下是一个示例代码:

代码语言:txt
复制
// 创建数据对象类
@Entity
@Table(name = "your_table_name")
public class YourEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "foreign_key_column")
    private Long foreignKey;

    // 其他属性和方法
}

// 在代码中使用Hibernate和Apache POI插入空值
public void insertDataWithNullForeignKey() {
    // 创建Excel文件
    Workbook workbook = new XSSFWorkbook();
    Sheet sheet = workbook.createSheet("Data");

    // 设置要插入的数据
    List<YourEntity> data = new ArrayList<>();
    YourEntity entity1 = new YourEntity();
    entity1.setForeignKey(null); // 设置外键字段为空值
    data.add(entity1);

    // 遍历数据集合,保存数据
    Session session = sessionFactory.openSession();
    Transaction transaction = session.beginTransaction();
    for (int i = 0; i < data.size(); i++) {
        YourEntity entity = data.get(i);
        session.save(entity);
        if (i % 20 == 0) { // 每20条数据进行一次批量保存
            session.flush();
            session.clear();
        }
    }
    transaction.commit();
    session.close();

    // 保存Excel文件
    try (FileOutputStream outputStream = new FileOutputStream("data.xlsx")) {
        workbook.write(outputStream);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

在上述示例中,我们创建了一个名为YourEntity的数据对象类,其中包含了一个外键字段foreignKey。在插入数据时,我们通过将外键字段设置为null来插入空值。然后,使用Hibernate的Session对象保存数据,并使用Apache POI创建一个Excel文件并保存数据。

请注意,上述示例仅为演示目的,实际使用时需要根据具体情况进行适当的修改和调整。

推荐的腾讯云相关产品:腾讯云对象存储(COS),它是一种高可用、高可靠、强安全的云存储服务,适用于存储和处理各种类型的非结构化数据。您可以通过以下链接了解更多信息:腾讯云对象存储(COS)

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何使用约束条件?主键、自增、外、非....

约束的基本使用 2. 外约束 ⑦【MySQL】约束条件 1. 约束的基本使用 约束: 什么是约束? 约束是作用于表字段上的规则,用于限制存储在表的数据。...,gender) VALUES ('小一',22,'1','女'); -- 当设置非约束的字段name插入null,会报错: -- 错误代码: 1048 Column 'name' cannot...INSERT INTO test(NAME,age,STATUS,gender) VALUES ('小二',-1,'1','女'); -- 当插入数据时,没有为默认约束字段status设置,会自动设置默认...外键名称 FOREIGN KEY(外字段名) REFERENCES 主表(主表字段名); 外的删除/更新行为: NO ACTION:在父表进行更新/删除时,首先检查记录是否存在外,存在则不允许删除...,存在则将外关联的字段设置为null(前提是外关联字段可以为null) SET DEFAULT:在父表进行更新/删除时,首先检查记录是否存在外,存在则将外关联的字段设置为一个默认(Innodb

509100

Hibernate框架学习之注解配置关系映射

而userinfo实体类定义了一个UserCode 类型的属性,当我们使用hibernate进行插入或者返回数据时候,usercode表对应的记录则会被装在在这个属性,当然,我们也通过它配置外关联关系...@JoinColumn用于配置外列,name属性用于指定外列的列名,Hibernate将会在userinfo表增加一个字段用做外列。...@JoinColumn依然用于配置外列。 对比着表的各个字段,再次体会下上述注解的属性的各个的意义。 ?...name属性指定了外字段字段名称,referencedColumnName属性指定了该外字段依赖于本表的那个字段(我们这里让他依赖于userSex的主键)。...首先会为我们插入四条userinfo记录到userinfo表(其中的外字段),然后插入一条记录到usersex表,在这之后,hibernate将根据set集合的元素依次执行这么一条SQL语句

2.2K90
  • Hibernate注解之基本注解的注解使用

    参考文档 Hibernate注解之基本注解的注解使用 使用注解须知 我们在使用注解自动创建表的时候,系统会默认为我们创建一张表Hibernate_sequence,我们可以在Hibernate.cfg.xml...01 TemporalType.TIMESTAMP 两者兼备,这个是默认的 @Column - 可将属性映射到列,使用该注解来覆盖默认,@Column描述了数据库表字段的详细定义...默认为 false length - 可选,表示该字段的大小,仅对 String 类型的字段有效,默认255....insertable -可选,表示在ORM框架执行插入操作时,该字段是否应出现INSETRT 语句中,默认为 true updateable -可选,表示在ORM 框架执行更新操作时...,但是我们也可以使用这个注解改变这个名称 这个注解是用来设置自动生成的外的属性,比如外的名称,非…… name 指定外的名称 nullable 指定外是否为,默认的是true

    2K10

    Java EE实用教程笔记----(8)第八章 Hibernate映射机制

    标签表示该部分映射的是主键,name属性指定类对应的属性,column属性指定对应表字段。 其中标签用来指定ID的生成方式,下面是详细介绍: ? ?...第二部分 数据类型映射 在Hibernate的映射文件,用标签来说明POJO类的属性与数据库表的哪一个字段对应,用type属性说明对应属性应该使用什么数据类型。...执行程序后,会把xh、xm、bir记录插入xs表,把本条记录的id及researchResult记录插入到yjs表。 ?...执行程序后,会把xh、xm、bir记录插入xs表,把本条记录的id及ky记录插入到bks表。 ?...运行该段代码后,程序会根据Yjs类设置Xs表的xsType为“yjs”,并把插入到Xs表。 ?

    1.1K20

    初识Hibernate之继承映射

    前面的两篇文章,我们介绍了两张表之间的各种相互关联映射关系,但往往我们也会遇到两张表甚至多张表之间共有着多个相同的字段。...newTable是一张综合的表,主要由student表和teacher表集成而来,对应于student表的记录salary字段,对应于teacher表记录的grade字段。...下面我们通过插入数据来看看具体生成的表的结构: 很明显,我们的person表只起到一个模板的效果并没有什么实际的价值,而我们students表和teachers表的id,name字段都是从person表中继承得到的...三、每个子类一张表      这种数据表的生成策略的主要思想就是将公共的信息存放在父表,子表只保存自己独有的字段信息了。...joined-subclass来配置继承子类,在Hibernate生成数据表的时候会将student和teacher表的主键作为外关联父表的主键。

    81280

    MySQL外约束

    关系是关系数据库的重要组成部分。关系是一个表的一个或几个属性,用来标识该表的每一行或与另一个表产生联系。...注意 : 外不一定要与相应主键同名,只是在应用为便于识别,当主键与相应外属于不同关系时,往往取同名 作用 保持数据一致性,完整性,主要目的是控制存储在外的数据。...使两张表形成关联,外只能引用外表的列的使用。 案例 如果不使用,表2的学号字段插了一个(比如20140999999),但该在表1并没有。...这时,数据库允许插入,并不会对插入的数据做关系检查。 然而在设置外时,你插入表2学号字段必须要求在表1的学号字段能找到。...同时,如果你要删除表1的某个学号字段,必须保证表2没有引用该字段的列,否则就没法删除。这就是所谓的保持数据的一致性和完整性。

    6.5K20

    MySQL表的约束

    2.属性null 在这个约束,有两个选择: null(默认的) not null(不为) 数据库默认字段基本都是字段允许为,但是实际开发时,尽可能保证字段不为,因为数据为没办法参与运算。...看看定义是怎么给的 auto_increment:当对应的字段,不给,会自动的被系统触发,系统会从当前字段已经有的最大+1操作,得到一个新的不同的。通常和主键搭配使用,作为逻辑主键。...唯一允许为,而且可以多个为,因为字段不做唯一性比较。 唯一和主键的区别: 在使用,主键是标识唯一性,而唯一是保证业务的数据唯一性。 主键一个表只能有一个,唯一可以有多个。...主键不能为,唯一可以为,甚至多个为。 对于主键的标识唯一性以及唯一的业务唯一性的理解: 一个表若存在id,name,telephone三个字段,无疑id是要被标识唯一性主键的。...外存在两种关系: 关联关系:逻辑上的关系,表与表之间有相同字段。 约束关系:通过关联关系实现表之间的约束。 此时student的class_id存在外之名(关联关系),但是没有外之实。

    21950

    MySql---外复习

    一个表可以有一个或多个外。 外对应的是参照完整性,一个表的外可以为,若不为,则每一个外必须等于另一个表主键的某个。...主键不能包含,但允许在外中出现。也就是说,只要外的每个非出现在指定的主键,这个外的内容就是正确的。 外列的数目必须和父表的主键列的数目相同,因为有组合主键和组合外。...---- 在创建表时设置外约束 在数据表创建外使用 FOREIGN KEY 关键字,具体的语法规则如下: [CONSTRAINT ] FOREIGN KEY 字段名 [,字段名2,…]...REFERENCES 主键列1 [,主键列2,…] 其中:外键名为定义的外约束的名称,一个表不能有相同名称的外字段名表示子表被外健约束的字段名;主表名即被子表外所依赖的表的名称;主键列表示主表定义的主键列或者列组合...,本表d_id字段为外,被参考表dept的id字段所约束 CONSTRAINT emp_dept_fk FOREIGN KEY(d_id) REFERENCES depart(id) ); 父表插入数据

    5.2K30

    Hibernate(或其它ORM)里的inverse用法详解,内容摘自Java web轻量级开发面试教程

    Inverse的英文含义是反转,在Hibernate中用来决定是由哪方来维护两个业务实体类之间的关联关系,具体而言,就是由哪方去设置这个被外约束的字段。    ...原因是,当设置inverse为true时,Person这一端反转外键控制权,也就是由Card这端来管理外,而在代码里我们仅仅是插入了Person,没有插入Card,所以就没有更新两个外(PersonID...相反,当inverse为false时,管理外键控制权是在Person端,那么当插入Person时,Hibernate就需要额外的一句update语句来管理外了。    ...原因是已经通过设置inverse把外管理权交给Course方了,这里仅仅是保存学生,并没有保存课程,所以没有插入的动作。...如果要在students_courses表里插入关联,就需要在person.hbm.xml里设置inverse的为false。

    70050

    初识Hibernate之关联映射(一)

    ,对于这个Address类型的属性,我们使用component标签进行配置,name和class分别指定组件名和其位置,在该标签下,使用property标签配置组件的成员对应于数据表字段。...我们先运行程序看看HIbernate是否为我们创建了这种外关联,然后通过插入数据进一步理解Hibernate在底层为我们做的事情。 ?...Student的grade属性则表示它将自己的引用交给了Student的外字段,也就是说student这条记录可以通过外字段找到grade代表的这条记录。...,如果没有设置级联的话,该段程序必然报错,因为grade表无任何数据,而student代表的一条记录的grade_id的字段却被强行插入数值1,自然会报错(外1在grade表找不到)。...但是我们配置了级联就不一样了,Hibernate会先保存grade到数据库,然后再插入student这条记录。从Hibernate的输出日志也可以看出来: ?

    1.3K80

    Hibernate【inverse和cascade属性】知识要点

    只能在“一”的一方中使用该属性!Inverse属性的默认为fasle,也就是当前一方是有控制权的 ?...这里写图片描述 如果我们在dept设置了级联保存,那么Hibernate就会知道:保存dept的数据时,发现dept了外,也把dept外的对象保存在数据库之中 <set name="set...这里写图片描述 ---- 级联删除 级联删除,这个对于我们来说风险太大了,如果删除了某些数据,会把另外有关联的数据也删除…在实际<em>中</em>我们一般不<em>使用</em>!...多对多关系的时候也是一样的,只不过多对多的关联关系是在中间表<em>中</em> cascade属性 cascade有这么几个<em>值</em>: none 不级联操作, 默认<em>值</em> save-update 级联保存或更新...级联保存、更新、删除 我们可能<em>使用</em>到的往往是:save-update这个<em>值</em>,因为级联删除的风险太大了!

    1.2K40

    Hibernate框架学习之三

    ●  多对多 建表原则:创建一个中间表,中间表至少两个字段作为外分别指向多对多双方的主键 ?...二、Hibernate 一对多关系映射 2.1创建表 ? ? 联系人表在外(lkm_cust_id),外键指向客户表,表示如下图: ?...在 Hibernate的映射文件使用标签用来描述被映射类的Set集合,标签的 column 属性对应文件多的一方的外键名称,在 Customer.java客户类,客户与联系人是一对多的关系...原来JDBC删除客户和联系人的时候,如果有外的关系是不可以删除的,但是现在我们使用了 Hibernate,其实 Hibernate可以实现这样的功能,但是不会删除客户同时删除联系人,默认情况下 Hibernate...inverse的默认是false ,代表不放弃外维护权,配置为true,代表放弃了外的维护权。此时就不会再产生之前的问题。

    1.8K110

    Django基表的创建、外字段属性简介、脏数据概念、子序列化

    更合理) """ Django orm中外字段属性详解 在建表之前我们对外字段属性进行了解: 1)related_name在外设置外反向查询的字段名:正向找字段名,反向找related_name...,related_name的默认是表名小写 + _set,这就是为什么在Django跨表反向查询时我们使用表名小写 + _set去查另一张表的数据。...SET_DEFAULT:假设A表依赖B表,B记录删除,A表的外字段重置为default属性设置的,所以必须配合default属性使用。...例子:部门没有了,部门员工里的部门字段改为未分组部门的id SET_NULL使用的时候需要NULL=True;假设A表依赖B表,B记录删除,A表的外字段重置为NULL,所以必须配合NULL=True使用...子序列化的使用方法及注意事项: 1)只能在序列化中使用 2)字段名必须是外(正向反向都可以)字段,相对于自定义序列化外字段,自定义序列化字段不能参与反序列化,而子序列化必须为外键名,子序列化字段不写入数据库

    4.3K30

    MySQL(五)之DDL(数据定义语言)与六大约束

    2)外检的特点       2.1)、外约束可以描述任意一个字段(包括主键),可以为,并且一个表可以有多个外。但是外字段必须是另一张表的主键。       ...而不是“是外”),并会给该表的外约束取一个名称,所以我们常说的这个表有没有外,指的不是被外约束修饰的字段名,而是指这个表是否有存在外约束。         ...tableA和tableB两个表,被外约束修饰的字段为tableB的deptId,主键字段为tableA的id  4.3、非约束     NOT NULL:被该约束修饰了的字段,就不能为,主键约束中就包括了这个约束...,表示该字段唯一,不能有相同的,通俗点讲,就好比插入两条记录,这两条记录处于该字段不能是一样的。      ...student表的所有都是不一样的   4.5、默认约束     DEFAULT:指定这一列的默认为多少,比如,男性同学比较多,性别就可以设置为默认男,如果插入一行记录时,性别没有填,那么就默认加上男

    2K90

    Hibernate框架学习之注解映射实体类

    三、使用注解映射主键属性 最简单的情况下,我们使用注解@Id标识实体类的某个属性,那么该属性将会被hibernate映射到数据库主键字段,并且无需指定任何属性。...总的来说,一旦hibernate发现实体类中有集合类型的属性需要映射,那么就会为集合属性单独映射出一张表,该表至少有两个字段,一个字段依赖于主表的id字段,在新表相同该字段的记录共同组合成为实体类的集合属性的...而对于有序集合来说,还应该包含一个字段用于保存每个集合元素在集合的序号,该序号字段和第一个外依赖字段组合成新表的联合主键,唯一标识一条记录。...在hibernate的管理下,当有数据添加进userinfo表的时候,hibernate将拿到该实体类实例的集合属性的,并连带该实例的id一起插入到新表。...当我们通过实体类实例向数据表插入数据的时候,hibernate会将组件类实例拆分出来的各个属性插入到对应的表字段

    3.1K90

    Spring Data JPA 就是这么简单

    该配置比较常用,当服务首次启动会在数据库中生成相应表,后续启动服务时如果实体类有增加属性会在数据添加相应字段,原来数据仍在,该配置除了 update ,还有其他配置, create :该慎用,...是 A1 和 B1 的子类,A1 和 B1 通常会使用如下的一个注解:@DiscriminatorValue 该注解只有一个 value 用来标注在插入数据的时候 dtype 字段。...教室里有学生,如何删除教室 如果数据库教室和学生存在绑定关系,如果删除这个教室就会出现问题,无法正常删除因为存在外,如何解决这个问题呢?...当删除数据的时候,如果该数据存在外是无法直接删除的,这是在日常使用当中很容易遇到的一个问题,现在就这个问题给出一些解决方案: ClassRoom 核心代码如下所示: @OneToMany(mappedBy...个人分析是使用 @OneToOne 和 @OneToMany 的实体类是存在外的,操作存在外的类,尤其是删除的时候就会很头痛,于是就提供了这样的一个属性,来消除外带来的烦恼。

    6.9K50
    领券