Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何清除/删除playframework中(功能)测试的数据库内容_Java_Playframework_Fixtures_Sqlexception - Fatal编程技术网

Java 如何清除/删除playframework中(功能)测试的数据库内容

Java 如何清除/删除playframework中(功能)测试的数据库内容,java,playframework,fixtures,sqlexception,Java,Playframework,Fixtures,Sqlexception,播放框架:1.2.3 嗨 我正在尝试使用play的设备清除我的数据库。然而,我在尝试时遇到了一些问题 首先,Fixtures.deleteDatabase()删除整个数据库,play不会在另一个测试中重新创建它(我也没有找到任何方法) 第二,尝试删除AllModules()我发现任何模型播放都有一个例外,即尝试删除: java.sql.SQLException: Lock wait timeout exceeded; try restarting 这些模型是在测试期间使用普通的Model.s

播放框架:1.2.3

我正在尝试使用play的设备清除我的数据库。然而,我在尝试时遇到了一些问题

首先,Fixtures.deleteDatabase()删除整个数据库,play不会在另一个测试中重新创建它(我也没有找到任何方法)

第二,尝试删除AllModules()我发现任何模型播放都有一个例外,即尝试删除:

java.sql.SQLException: Lock wait timeout exceeded; try restarting 
这些模型是在测试期间使用普通的Model.save()创建的。我想——再一次——事务以某种方式进入了我的视线。但是,查看数据库,所有模型都被持久化了

@After
public void tearDown() throws InterruptedException, ExecutionException {
    new Job() {
        @Override
        public void doJob() throws Exception {
            Logger.debug("[SetupUtils.createClearDBJob().new Job() {...}] Deleting database");
            Fixtures.deleteAllModels();
            //              Fixtures.delete()
            //              Fixtures.deleteDatabase();
        }
    }.now().get();
}
全堆栈跟踪

ERROR 563 :play#niceThrowable - While deleting class models.DropboxFolder instances
    javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute update query
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214)
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147)
    at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:1224)
    at org.hibernate.ejb.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:108)
    at play.db.jpa.JPAPlugin$JPAModelLoader.deleteAll(JPAPlugin.java:478)
    at play.test.Fixtures.delete(Fixtures.java:72)
    at play.test.Fixtures.delete(Fixtures.java:92)
    at play.test.Fixtures.deleteAllModels(Fixtures.java:104)
    at mashpan.utilities.SetupUtils$2.doJob(SetupUtils.java:44)
    at play.jobs.Job.doJobWithResult(Job.java:50)
    at play.jobs.Job.call(Job.java:146)
    at play.jobs.Job$1.call(Job.java:66)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:165)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:679)
Caused by: org.hibernate.exception.GenericJDBCException: could not execute update query
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
    at org.hibernate.hql.ast.exec.BasicExecutor.execute(BasicExecutor.java:110)
    at org.hibernate.hql.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:421)
    at org.hibernate.engine.query.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:283)
    at org.hibernate.impl.SessionImpl.executeUpdate(SessionImpl.java:1288)
    at org.hibernate.impl.QueryImpl.executeUpdate(QueryImpl.java:117)
    at org.hibernate.ejb.QueryImpl.internalExecuteUpdate(QueryImpl.java:188)
    at org.hibernate.ejb.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:99)
    ... 15 more
Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2626)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2111)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2407)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2325)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2310)
    at org.hibernate.hql.ast.exec.BasicExecutor.execute(BasicExecutor.java:101)
    ... 21 more
ERROR 563 :play#niceThrowable - While deleting class models.User instances
    javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute update query
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214)
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147)
    at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:1224)
    at org.hibernate.ejb.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:108)
    at play.db.jpa.JPAPlugin$JPAModelLoader.deleteAll(JPAPlugin.java:478)
    at play.test.Fixtures.delete(Fixtures.java:72)
    at play.test.Fixtures.delete(Fixtures.java:92)
    at play.test.Fixtures.deleteAllModels(Fixtures.java:104)
    at mashpan.utilities.SetupUtils$2.doJob(SetupUtils.java:44)
    at play.jobs.Job.doJobWithResult(Job.java:50)
    at play.jobs.Job.call(Job.java:146)
    at play.jobs.Job$1.call(Job.java:66)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at 


java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:165)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:679)
Caused by: org.hibernate.exception.GenericJDBCException: could not execute update query
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
    at org.hibernate.hql.ast.exec.BasicExecutor.execute(BasicExecutor.java:110)
    at org.hibernate.hql.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:421)
    at org.hibernate.engine.query.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:283)
    at org.hibernate.impl.SessionImpl.executeUpdate(SessionImpl.java:1288)
    at org.hibernate.impl.QueryImpl.executeUpdate(QueryImpl.java:117)
    at org.hibernate.ejb.QueryImpl.internalExecuteUpdate(QueryImpl.java:188)
    at org.hibernate.ejb.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:99)
    ... 15 more
Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2626)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2111)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2407)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2325)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2310)
    at org.hibernate.hql.ast.exec.BasicExecutor.execute(BasicExecutor.java:101)
    ... 21 more

您可以尝试在引导中设置创建/删除操作,并检查Play!是否在测试模式或生产模式下运行

@OnApplicationStart
public class Bootstrap extends Job {

  public void doJob() {
    if (Play.mode == Play.Mode.DEV) {
        DropboxFolder.deleteAll(); // delete 
        Fixtures.load("samples_data.yml"); // recreate 
    }
  }
}

到底是什么问题,您必须首先删除数据库,删除数据库中的所有内容,然后创建数据,例如Fixtures.loadModels:您还需要什么?Fixtures.deleteDatabase()删除整个数据库,play不会在下一次测试中重新创建它,因此加载模型也会失败。因此,我无法这样做。我正在寻找一种方法,删除所有表中的所有行,但不删除其他行。另一种方法是删除所有表,甚至删除整个数据库,然后让play重新创建它。但是,没有找到一种方法那个