在数据库播放框架jpa中插入初始数据

时间:2015-07-30 06:43:45

标签: mysql sql jpa playframework sql-insert

我正在使用jpa mysql播放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文件,但它没有显示任何内容。

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

1 个答案:

答案 0 :(得分:0)

您可以在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);
            }
        });
    }
}