import org.hibernate.jdbc.ReturningWork; //导入依赖的package包/类
private void clearDatabase() throws SQLException
{
CommitCounter.versionedThing.get().reset();
EntityManager em = getEntityManager();
em.clear();
EntityTransaction transaction = em.getTransaction();
if (!transaction.isActive())
{
transaction.begin();
}
final Connection c;
if (concreteJpaProviderTestModuleClass == HibernateJpaTestModule.class)
{
// Hibernate cannot unwrap JDBC connection directly
c = em.unwrap(Session.class).doReturningWork(new ReturningWork()
{
@Override
public Connection execute(Connection connection) throws SQLException
{
return connection;
}
});
}
else
{
c = em.unwrap(Connection.class);
}
Statement s = c.createStatement();
s.execute("SET REFERENTIAL_INTEGRITY FALSE");
Set tables = new HashSet();
ResultSet rs = s.executeQuery("select table_name " + "from INFORMATION_SCHEMA.tables "
+ "where table_type='TABLE' and table_schema='PUBLIC'");
while (rs.next())
{
// if we don't skip over the sequence table, we'll start getting "The sequence table information is not complete"
// exceptions
if (!rs.getString(1).startsWith("DUAL_") && !rs.getString(1).equals("SEQUENCE"))
{
tables.add(rs.getString(1));
}
}
rs.close();
for (String table : tables)
{
s.executeUpdate("DELETE FROM " + table);
}
transaction.commit();
s.execute("SET REFERENTIAL_INTEGRITY TRUE");
s.close();
}