Skip to content

Commit 77a34e6

Browse files
committed
HHH-18519 - Add vararg method to HibernatePersistenceConfiguration for supplying mappings
1 parent 4b06bf6 commit 77a34e6

File tree

2 files changed

+102
-0
lines changed

2 files changed

+102
-0
lines changed

hibernate-core/src/main/java/org/hibernate/jpa/HibernatePersistenceConfiguration.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
*/
77
package org.hibernate.jpa;
88

9+
import java.util.Collection;
10+
import java.util.Collections;
911
import java.util.Map;
1012
import java.util.Objects;
1113

@@ -15,8 +17,10 @@
1517
import org.hibernate.cfg.JdbcSettings;
1618
import org.hibernate.cfg.JpaComplianceSettings;
1719
import org.hibernate.cfg.MappingSettings;
20+
import org.hibernate.cfg.SchemaToolingSettings;
1821
import org.hibernate.cfg.StatisticsSettings;
1922
import org.hibernate.resource.jdbc.spi.StatementInspector;
23+
import org.hibernate.tool.schema.Action;
2024

2125
import jakarta.persistence.EntityManager;
2226
import jakarta.persistence.EntityManagerFactory;
@@ -26,6 +30,8 @@
2630
import jakarta.persistence.ValidationMode;
2731

2832
/**
33+
* Hibernate extension to the Jakarta Persistence PersistenceConfiguration contract.
34+
*
2935
* @author Steve Ebersole
3036
*/
3137
public class HibernatePersistenceConfiguration extends PersistenceConfiguration {
@@ -303,6 +309,61 @@ public HibernatePersistenceConfiguration collectStatistics(boolean enabled) {
303309
return this;
304310
}
305311

312+
/**
313+
* Add the specified classes as {@linkplain #managedClasses() managed classes}.
314+
*
315+
* @see #managedClass
316+
*/
317+
public HibernatePersistenceConfiguration managedClasses(Class<?>... managedClasses) {
318+
Collections.addAll( managedClasses(), managedClasses );
319+
return this;
320+
}
321+
322+
/**
323+
* Add the specified classes as {@linkplain #managedClasses() managed classes}.
324+
*
325+
* @see #managedClass
326+
*/
327+
public HibernatePersistenceConfiguration managedClasses(Collection<Class<?>> managedClasses) {
328+
managedClasses().addAll( managedClasses );
329+
return this;
330+
}
331+
332+
/**
333+
* Add the specified resource names as {@linkplain #mappingFiles() mapping files}.
334+
*
335+
* @see #mappingFiles
336+
*/
337+
public HibernatePersistenceConfiguration mappingFiles(String... names) {
338+
Collections.addAll( mappingFiles(), names );
339+
return this;
340+
}
341+
342+
/**
343+
* Add the specified resource names as {@linkplain #mappingFiles() mapping files}.
344+
*
345+
* @see #mappingFiles
346+
*/
347+
public HibernatePersistenceConfiguration mappingFiles(Collection<String> names) {
348+
mappingFiles().addAll( names );
349+
return this;
350+
}
351+
352+
/**
353+
* Specify the {@linkplain Action action} to take in terms of automatic
354+
* database schema tooling.
355+
*
356+
* @apiNote This only controls tooling as exported directly to the database. To
357+
* output tooling commands to scripts, use {@linkplain #properties(Map) config properties}
358+
* instead with appropriate {@linkplain SchemaToolingSettings settings}.
359+
*
360+
* @see SchemaToolingSettings#HBM2DDL_AUTO
361+
*/
362+
public HibernatePersistenceConfiguration schemaToolingAction(Action action) {
363+
property( SchemaToolingSettings.HBM2DDL_AUTO, action );
364+
return this;
365+
}
366+
306367

307368
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
308369
// covariant overrides

hibernate-core/src/test/java/org/hibernate/orm/test/jpa/boot/PersistenceConfigurationTests.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,18 @@
66
*/
77
package org.hibernate.orm.test.jpa.boot;
88

9+
import java.util.List;
10+
911
import org.hibernate.dialect.H2Dialect;
12+
import org.hibernate.engine.spi.SessionFactoryImplementor;
1013
import org.hibernate.jpa.HibernatePersistenceConfiguration;
14+
import org.hibernate.tool.schema.Action;
1115

1216
import org.hibernate.testing.env.TestingDatabaseInfo;
17+
import org.hibernate.testing.orm.domain.library.Book;
18+
import org.hibernate.testing.orm.domain.library.Person;
1319
import org.hibernate.testing.orm.junit.RequiresDialect;
20+
import org.hibernate.testing.transaction.TransactionUtil2;
1421
import org.junit.jupiter.api.Test;
1522

1623
import jakarta.persistence.EntityManagerFactory;
@@ -110,4 +117,38 @@ public void testForUserGuide() {
110117
//end::example-bootstrap-standard-HibernatePersistenceConfiguration[]
111118
}
112119
}
120+
121+
@Test
122+
@RequiresDialect( H2Dialect.class )
123+
public void testVarargs() {
124+
final PersistenceConfiguration cfg = new HibernatePersistenceConfiguration( "emf" )
125+
.jdbcUrl( "jdbc:h2:mem:db1" )
126+
.jdbcUsername( "sa" )
127+
.jdbcPassword( "" )
128+
.schemaToolingAction( Action.CREATE_DROP )
129+
.managedClasses( Book.class, Person.class );
130+
try (EntityManagerFactory emf = cfg.createEntityManagerFactory()) {
131+
assert emf.isOpen();
132+
TransactionUtil2.inTransaction( emf.unwrap( SessionFactoryImplementor.class ), (em) -> {
133+
em.createSelectionQuery( "from Book", Book.class ).list();
134+
} );
135+
}
136+
}
137+
138+
@Test
139+
@RequiresDialect( H2Dialect.class )
140+
public void testVarargs2() {
141+
final PersistenceConfiguration cfg = new HibernatePersistenceConfiguration( "emf" )
142+
.jdbcUrl( "jdbc:h2:mem:db1" )
143+
.jdbcUsername( "sa" )
144+
.jdbcPassword( "" )
145+
.schemaToolingAction( Action.CREATE_DROP )
146+
.managedClasses( List.of( Book.class, Person.class ) );
147+
try (EntityManagerFactory emf = cfg.createEntityManagerFactory()) {
148+
assert emf.isOpen();
149+
TransactionUtil2.inTransaction( emf.unwrap( SessionFactoryImplementor.class ), (em) -> {
150+
em.createSelectionQuery( "from Book", Book.class ).list();
151+
} );
152+
}
153+
}
113154
}

0 commit comments

Comments
 (0)