Hibernate has many properties that can be very helpful during development phrase. In this article we list some most used hibernate properties used when developing/testing persistence layer applications.
1. Meaning of most used hibernate properties
1.1 Print out Hibernate created SQL
hibernate.show_sql = true
1.2 Automatic create tables according to entities
hibernate.hbm2ddl.auto = create
Change to create-drop if you want to drop the created table when application over. Useful for prototype and testing.
1.3 Run SQL scripts at beginning of application
hibernate.hbm2ddl.import_files = /path/of/sqlfile
This's most used to insert some test data before unit test case running.
1.4 Use c3p0 connection pool
hibernate.c3p0.min_size=5 // minimum connections in pool
hibernate.c3p0.max_size=20 // maximum connections in pool
hibernate.c3p0.timeout=1800 // time out to remove idle connection. In seconds
hibernate.c3p0.max_statements=50 // cache prepared statements
hibernate.c3p0.idle_test_period=3000 // how often to validate a connection. In seconds.
1.5 Use Improved Naming Strategy ("clientAddress"->"client_address")
hibernate.ejb.naming_strategy = org.hibernate.cfg.ImprovedNamingStrategy
2. Use Hibernate properties in JPA persistence.xml
If use Hibernate as JPA provider, you can set hibernate properties in persistence.xml.
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> <persistence-unit name="persistenceUnitName" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> <!-- common jdbc configuration --> <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" /> <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:mydb" /> <property name="javax.persistence.jdbc.user" value="sa" /> <property name="javax.persistence.jdbc.password" value="" /> <!-- ==================== --> <!-- hibernate properties --> <!-- ==================== --> <property name="hibernate.hbm2ddl.auto" value="create" /> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/> </properties> </persistence-unit> </persistence>
3. Use Hibernate properties in Spring Boot
Spring boot does a lot of auto configurations. So there is no need to use hibernate.hbm2ddl.import_files to set a sql script file location to run. Just put the sql script file as src/main/resources/import.sql. Spring boot will auto config it if spring-boot-starter-data-jpa is in pom.
There is also no need for hibernate.hbm2ddl.auto. Spring boot will also auto detect if the database used is a embedded one, like HSQL, H2 or Derby, or external database. If a embedded database is used, default is create-drop. Otherwise for external database, default is none. (No tables will be auto created). You can set this behavior in spring boot's configuration file application.properties with spring.jpa.hibernate.ddl-auto= create, for example.
Other hibernate properties can be se with prefix 'spring.jpa.properties.' , such as add following lines in /src/main/resources/application.properties
# hibernate special properties, with prefix "spring.jpa.properties."
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.properties.hibernate.c3p0.min_size=3
spring.jpa.properties.hibernate.c3p0.max_size=10
spring.jpa.properties.hibernate.show_sql=true
4. What's More
For complete hibernate 4.x configuration properties, check official hibernate reference.
0 comments:
Post a Comment