gpt4 book ai didi

database - JPA + Spring 如何用自定义表和数据初始化数据库

转载 作者:搜寻专家 更新时间:2023-10-30 22:15:11 45 4
gpt4 key购买 nike

在我的应用程序中,我使用 Spring 上下文和 JPA。我有一些用 @Entity 注释的实体集,它们的表是在系统启动期间自动创建的。最近我开始使用 Spring ACL,所以我必须拥有 following additional DB schema并且我不希望将这些表映射到实体(只是我不需要它们,因为 Spring ACL 独立管理它们)。

  1. 我想自动插入例如管理员用户帐户进入用户的实体表。如何正确地做到这一点?
  2. 我想在系统启动时初始化 Spring ACL 自定义表,但 SQL 脚本文件似乎不是一个好的解决方案,因为如果我使用不同的数据库进行生产和功能测试,不同的 SQL 方言不允许我执行脚本在两个引擎上都正确(例如,使用 MySQL 和 HSQL 时)。

起初我尝试使用 ServletListener 在 servlet 初始化期间检查数据库并添加必要的数据和模式,但这不适用于集成测试(因为根本不涉及 servlet) .

我想要实现的是在 JPA 初始化所有实体表后启动的 Spring bean(?),使用注入(inject)的 DAO 插入所有启动数据并以某种方式创建 Spring ACL 模式。然后 - 我希望从 IoC 中删除 bean(因为我不再需要它了)。可能吗?

或者有更好的方法吗?

最佳答案

默认的 JPA 允许您在加载 persistence.xml 时添加 SQL 脚本:

http://docs.oracle.com/javaee/7/tutorial/persistence-intro005.htm

将此属性添加到您的 persistence.xml 文件中:

   <property name="javax.persistence.sql-load-script-source"
value="META-INF/sql/data.sql" />

并用您的默认值填充 data.sql 文件。

关于database - JPA + Spring 如何用自定义表和数据初始化数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14334681/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com