我正在使用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
INSERT INTO `roles` (`id`, `name`) VALUES(1, 'supersuperadmin')
但是当我运行我的应用程序时,它会创建数据库,但它会在roles
表中插入任何内容。
我还尝试使用与上面相同的数据创建evolutions/default/1.sql
或2.sql
文件,但它没有显示任何内容。
所以我做错了。如何在数据库中插入初始数据?
答案 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);
}
});
}
}