我正在使用带有 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.sql
或 2.sql
文件,但没有显示任何内容。
所以我做错了什么。如何在我的数据库中插入初始数据?
最佳答案
您可以在 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);
}
});
}
}
关于mysql - 在数据库 Play Framework jpa中插入初始数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31716862/