7.4.6. Virtuoso JDBC Driver Hibernate Support
Introduction
What
Hibernate is a powerful, open source, high performance object/relational persistence and query service. Hibernate lets you develop persistent classes following object-oriented idiom - including association, inheritance, polymorphism, composition, and collections. Hibernate allows you to express queries in its own portable SQL extension (HQL), as well as in native SQL, or with an object-oriented Criteria and Example API.
Why
Hibernate employs very aggressive, and very intelligent first and second level caching strategy, providing a high performance and scalable development framework for Java. Greater cross portability and productivity can also be achieve using hibernate as the same techniques can be employed across multiple databases.
How
Hibernate uses JDBC for accessing databases and may require a given database has a custom SQL dialect file that informs Hibernate what SQL dialects are to be use for performing certain operations against the target database. Although not strictly required, it should be used to ensure Hibernate Query Language (HQL) statements are correctly converted into the proper SQL dialect for the underlying database. Virtuoso includes a new jar file called virt_dialect.jar containing the SQL dialect mappings required between hibernate and Virtuoso and is used in conjunction to the Virtuoso JDBC Drivers (virtjdbc3.jar or virtjdbc4.jar).
Setup and Testing
Three sample programs are provided to test Virtuoso hibernate support. Extract the contents of the zip file to a location of choice.
Requirements
-
Hibernate 3.3 or higher
-
JDK 5.0 or higher on any operating system
-
Ant 1.6
-
Virtuoso SQL Dialect jar file (virt_dialect.jar)
-
Virtuoso JDBC Driver (virtjdbc4.jar)
Building and running the example
The following Ant targets are available:
clean Clean the build directory compile Build example run Build and run example
Hibernate connection string
Edit the file hibernate.cfg.xml
in the "bin" and "src" directories of the hibernate application directory
with the correct connection attributes for the Virtuoso Server instance:
$ more hibernate.cfg.xml <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">virtuoso.jdbc4.Driver</property> <property name="connection.url">jdbc:virtuoso://localhost:1111/</property> <property name="connection.username">dba</property> <property name="connection.password">dba</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect --> <property name="dialect">virtuoso.hibernate.VirtuosoDialect</property> <!-- Enable Hibernate's current session context --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">create</property> <mapping resource="events/Event.hbm.xml"/> </session-factory> </hibernate-configuration>
The key attributes being
-
connection.driver_class
- Virtuoso JDBC Driver class name, typically virtuoso.jdbc4.Driver
-
connection.url - Virtuoso JDBC Driver connect string for target Virtuoso server instance, of the form
jdbc:virtuoso://hostname:portno
-
connection.username
- Virtuoso Server username
-
connection.password
- Virtuoso Server password