【问题标题】:Inserting initial data in database play framework jpa在数据库播放框架jpa中插入初始数据
【发布时间】:2015-07-30 06:43:44
【问题描述】:

我正在使用带有 jpa mysql 的 play 2.3。我的数据库中有一个管理员,应该在创建数据库时最初创建。我找到了关于它的this 线程。所以我的persistence.xml 看起来像

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
             version="2.1">

    <persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <non-jta-data-source>DefaultDS</non-jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
            <property name="hibernate.hbm2ddl.auto" value="create"/>
            <property name="javax.persistence.sql-load-script-source"
                      value="META-INF/sql/data.sql"/>
        </properties>

    </persistence-unit>

</persistence>

然后我在META-INF/sql/data.sql创建了一个sql文件

INSERT INTO `roles` (`id`, `name`) VALUES(1, 'supersuperadmin')

但是当我运行我的应用程序时,它会创建数据库,但它会在roles 表中插入任何内容。

我也尝试使用与上述相同的数据创建 evolutions/default/1.sql2.sql 文件,但它什么也没显示。

所以我做错了什么。如何在我的数据库中插入初始数据?

【问题讨论】:

  • 您可以使用 Evolutions 脚本插入数据。
  • 您也可以在 Global 中使用 onStart 方法,并在每次应用程序启动时检查您的管理员是否已经在您的数据库中创建。
  • @MonCalamari 我试过检查我的编辑是否有效
  • @Kris 你能举个例子说明如何从Global.onStart()运行那些插入sql

标签: mysql sql jpa playframework sql-insert


【解决方案1】:

您可以使用 Global 中的 onStart 方法,并在每次应用程序启动时检查您的管理员是否已在您的数据库中创建。

public class Global extends GlobalSettings {

    @Override
    public void onStart(Application app) {
        checkAdmin();
    }

    private void checkAdmin() {
        // You have to start the transaction by hand - can't use @transactional
        JPA.withTransaction(() -> {
            // Check if admin exists in DB
            UserModel admin = JPA.em().find(UserModel.class, "admin");
            if (admin == null) {
                admin = // Create your admin here
                JPA.em().persist(admin);
            }
        });
    }
}

【讨论】:

  • 我必须运行插入 sql 但是如果没有创建用户如何找到它
  • JPA 为您管理插入 SQL。使用 JPA 的持久化。据我了解,如果您在启动应用程序时尚不存在管理员用户,您想创建一个管理员用户,不是吗?
  • 是的,我想要,但我有 4 或 5 个与该表相关的表,例如 admin、roles、permission 等,所以我正在寻找一些 JPA 方式或播放方式,比如我们创建 1.sql 和 2。 sql
  • 抱歉,帮不了你。
  • 好的,非常感谢你的努力意味着很多,如果我想用 jpa 得到任何解决方案,我会试试这个
猜你喜欢
  • 2014-04-11
  • 2014-04-21
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 2020-10-21
相关资源
最近更新 更多