package com.querydsl.example.jpa.repository; import com.google.inject.persist.Transactional; import com.querydsl.example.jpa.guice.GuiceTestRunner; import org.hibernate.Session; import org.hibernate.jdbc.Work; import org.junit.Before; import org.junit.runner.RunWith; import javax.inject.Inject; import javax.inject.Provider; import javax.persistence.EntityManager; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; @RunWith(GuiceTestRunner.class) public abstract class AbstractPersistenceTest { @Inject private Provider<EntityManager> em; @Before @Transactional public void before() { EntityManager entityManager = em.get(); entityManager.getEntityManagerFactory().getCache().evictAll(); Session session = entityManager.unwrap(Session.class); session.doWork(new Work() { @Override public void execute(Connection connection) throws SQLException { List<String> tables = new ArrayList<String>(); DatabaseMetaData md = connection.getMetaData(); ResultSet rs = md.getTables(null, null, null, new String[] {"TABLE"}); try { while (rs.next()) { tables.add(rs.getString("TABLE_NAME")); } } finally { rs.close(); } java.sql.Statement stmt = connection.createStatement(); try { stmt.execute("SET REFERENTIAL_INTEGRITY FALSE"); for (String table : tables) { stmt.execute("TRUNCATE TABLE " + table); } stmt.execute("SET REFERENTIAL_INTEGRITY TRUE"); } finally { stmt.close(); } } }); } }