1313 * See the License for the specific language governing permissions and
1414 * limitations under the License.
1515 */
16- package org .springframework .data .jpa .repository ;
16+ package org .springframework .data .jpa .benchmark ;
1717
1818import jakarta .persistence .EntityManager ;
1919import jakarta .persistence .EntityManagerFactory ;
20- import jakarta .persistence .Persistence ;
2120import jakarta .persistence .Query ;
2221import jakarta .persistence .TypedQuery ;
2322import jakarta .persistence .criteria .CriteriaBuilder ;
2423import jakarta .persistence .criteria .CriteriaQuery ;
2524import jakarta .persistence .criteria .Root ;
26- import jmh .mbr .junit5 .Microbenchmark ;
2725
28- import java .util .HashMap ;
2926import java .util .List ;
30- import java .util .Map ;
27+ import java .util .Properties ;
3128import java .util .Set ;
3229
30+ import org .hibernate .jpa .HibernatePersistenceProvider ;
31+ import org .junit .platform .commons .annotation .Testable ;
3332import org .openjdk .jmh .annotations .Benchmark ;
3433import org .openjdk .jmh .annotations .Fork ;
3534import org .openjdk .jmh .annotations .Level ;
4241import org .openjdk .jmh .annotations .Warmup ;
4342
4443import org .springframework .data .domain .Sort ;
45- import org .springframework .data .jpa .model .IPersonProjection ;
46- import org .springframework .data .jpa .model .Person ;
47- import org .springframework .data .jpa .model .Profile ;
44+ import org .springframework .data .jpa .benchmark .model .IPersonProjection ;
45+ import org .springframework .data .jpa .benchmark .model .Person ;
46+ import org .springframework .data .jpa .benchmark .model .Profile ;
47+ import org .springframework .data .jpa .benchmark .repository .PersonRepository ;
4848import org .springframework .data .jpa .repository .support .JpaRepositoryFactory ;
49+ import org .springframework .orm .jpa .LocalContainerEntityManagerFactoryBean ;
50+ import org .springframework .orm .jpa .vendor .HibernateJpaVendorAdapter ;
4951import org .springframework .util .ObjectUtils ;
5052
5153/**
5254 * @author Christoph Strobl
5355 */
54- @ Microbenchmark
56+ @ Testable
5557@ Fork (1 )
5658@ Warmup (time = 2 , iterations = 3 )
5759@ Measurement (time = 2 )
5860@ Timeout (time = 2 )
59- public class RepositoryFinderTests {
61+ public class RepositoryFinderBenchmarks {
6062
6163 private static final String PERSON_FIRSTNAME = "first" ;
6264 private static final String COLUMN_PERSON_FIRSTNAME = "firstname" ;
@@ -103,12 +105,23 @@ public void doTearDown() {
103105
104106 private void createEntityManager () {
105107
106- Map <String , String > properties = new HashMap <>();
108+ LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean ();
109+ factoryBean .setPersistenceUnitName ("benchmark" );
110+ factoryBean .setJpaVendorAdapter (new HibernateJpaVendorAdapter ());
111+ factoryBean .setPersistenceProviderClass (HibernatePersistenceProvider .class );
112+ factoryBean .setPersistenceXmlLocation ("classpath*:META-INF/persistence-jmh.xml" );
113+ factoryBean .setMappingResources ("classpath*:META-INF/orm-jmh.xml" );
114+
115+ Properties properties = new Properties ();
107116 properties .put ("jakarta.persistence.jdbc.url" , "jdbc:h2:mem:test" );
108117 properties .put ("hibernate.dialect" , "org.hibernate.dialect.H2Dialect" );
109118 properties .put ("hibernate.hbm2ddl.auto" , "update" );
110- EntityManagerFactory entityManagerFactory = Persistence .createEntityManagerFactory ("benchmark" , properties );
119+ properties .put ("hibernate.xml_mapping_enabled" , "false" );
120+
121+ factoryBean .setJpaProperties (properties );
122+ factoryBean .afterPropertiesSet ();
111123
124+ EntityManagerFactory entityManagerFactory = factoryBean .getObject ();
112125 entityManager = entityManagerFactory .createEntityManager ();
113126 }
114127
@@ -139,7 +152,7 @@ public List<Person> baselineEntityManagerCriteriaQuery(BenchmarkParameters param
139152 public List <Person > baselineEntityManagerHQLQuery (BenchmarkParameters parameters ) {
140153
141154 Query query = parameters .entityManager
142- .createQuery ("SELECT p FROM org.springframework.data.jpa.model.Person p WHERE p.firstname = ?1" );
155+ .createQuery ("SELECT p FROM org.springframework.data.jpa.benchmark. model.Person p WHERE p.firstname = ?1" );
143156 query .setParameter (1 , PERSON_FIRSTNAME );
144157
145158 return query .getResultList ();
@@ -148,7 +161,8 @@ public List<Person> baselineEntityManagerHQLQuery(BenchmarkParameters parameters
148161 @ Benchmark
149162 public Long baselineEntityManagerCount (BenchmarkParameters parameters ) {
150163
151- Query query = parameters .entityManager .createQuery ("SELECT COUNT(*) FROM org.springframework.data.jpa.model.Person p WHERE p.firstname = ?1" );
164+ Query query = parameters .entityManager .createQuery (
165+ "SELECT COUNT(*) FROM org.springframework.data.jpa.benchmark.model.Person p WHERE p.firstname = ?1" );
152166 query .setParameter (1 , PERSON_FIRSTNAME );
153167
154168 return (Long ) query .getSingleResult ();
0 commit comments