【问题标题】:How to create insert statements for table with Collection如何使用 Collection 为表创建插入语句
【发布时间】:2021-04-04 18:51:30
【问题描述】:

我有一个具有实体 Entitya 的 Spring Boot JPA 项目。这个实体有一个集合属性

@ElementCollection(targetClass=String.class)
private List<String> options = new ArrayList<String>(10);

使用获取/设置

我看到创建的表 - Entitya 和 Entitya_options [看起来 entitya 对 Entitya_options 一无所知。但是 entitya_options 具有 Entitya 的外键] 我不需要额外的桌子,但没关系

我想使用 import.sql 插入数据,我该怎么做?

Insert into "ENTITYA" (FORMULA,NOTE,ACTION_ID) values (....);

在插入Entitya时如何也插入Entitya_options?

编辑

问题: 我应该使用以下注释吗?如前所述-How to persist a property of type List<String> in JPA?

@ElementCollection // 1
    @CollectionTable(name = "my_list", joinColumns = @JoinColumn(name = "id")) // 2
    @Column(name = "list") // 3
    private List<String> list;

我需要完整插入语句,可以放在 import.sql 中

【问题讨论】:

    标签: sql spring-boot jpa-2.0


    【解决方案1】:

    您可以使用import.sql(Hibernate 支持)或data.sql(Spring JDBC 支持)文件来加载数据。

    如果您使用JPAembedded datasource,您的schema.sql 将不会生效,因为 Hibernate 的 DDL 生成优先于它。

    解决该问题的方法是设置以下属性:

    spring.jpa.hibernate.ddl-auto=none

    自 Spring boot 2 起,默认情况下仅对嵌入式数据源初始化模式。要允许为所有类型的数据源加载数据,您必须设置以下属性:

    spring.datasource.initialization-mode=always
    
    spring.datasource.data=classpath:my_script1.sql, classpath:my_script2.sql
    

    更新

    @Component
    public class MyEntityInitializer implements CommandLineRunner{
    
    @Autowired
    EntityaRepository entityaRepository;
    
    @Override
      public void run(String... args) {
       Entitya entitya = new Entitya();
       entitya.setOptions(Arrays.asList("op1","op2"));
       entityaRepository.save(entitya);
     }
    
    } 
    

    通过这种方式,您可以在每次启动应用程序时插入您的条目。 确保检查已经存在的记录,否则会出现主键异常。

    【讨论】:

    • 对不起,我不是要这个,我已经拥有了所有这些。我正在寻找带有列名和值的插入语句
    • 您应该为此查找 sql "INSERT INTO SELECT" 语句。或配置CommandLineRunner@postConstruct 用于对实体执行插入操作
    • 请给出完整答案。部分 cmets 没有帮助
    • 感谢您的更新,但我正在寻找 import.sql 选项,以保持清洁。我可以插入 entitya(..);插入entittya_options(...引用entitya的自动生成的ID),但我希望100%确定选项指向正确的entitya。我将插入 1000 个实体和时间 x 4 或 6 个选项
    猜你喜欢
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多