Hibernate Certification
Purpose
Hibernate Certification is a means for vendors and users to substantiate the quality of their product with respect to the Hibernate Core. It consists of tools and a process. Certification can be used to qualify an application for the purpose of support, but is most useful for ISVs who need to mitigate the risk of a third-party platform.
The Hibernate Certification is based on a particular versioned set of
- Hibernate Core for Java
- JDBC Driver
- Database Management System
Hibernate Certification provides a guarantee that these components work together smoothly and as expected, and that any exceptions are documented and communicated during the Hibernate Certification process. All products that are certified for Hibernate will be listed with detailed information on the public Hibernate and JBoss Inc. website.
Process
Certain customizations of the Hibernate default configuration options, or SQL Dialect plugins, might be required to complete Hibernate Core Certification. These customizations are, after successful completion of the Certification, considered by Hibernate developers for inclusion into the regular Hibernate distribution during regular release cycles.
The Hibernate Certification comes with a Test Kit. This Test Kit is useful for an organization who wishes to embed the certification process within their development processes.
Please contact us if you are interested in certifying your products with Hibernate.
Certified Products
SQL Server 2005
| Vendor/Partner: | Microsoft, Inc. |
| Certification Date: | January 2006 |
| Hibernate version: | Hibernate Core for Java 3.1.1 |
| Hibernate dialect: | org.hibernate.dialect.SQLServerDialect (bundled) |
| JDBC Driver: | Microsoft SQL Server 2005 JDBC Driver, Version 1.0.809.102 |
| DBMS: | Microsoft SQL Server 2005 Express Edition, Version 9.00.1399 |
| DBMS Operating System: | Microsoft Windows XP SP2 |
| Client Operating System: | Microsoft Windows XP SP2 |
| Client Java version: | Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_03-b07) |
Remarks and guidelines
Snapshot isolation mode
Microsoft SQL Server 2005 offers a new transaction isolation mode, Snapshot.The Hibernate test CMTTest fails with deadlock issues if this new transaction isolation level is not set in the Hibernate configuration: hibernate.connection.isolation = 4096. We highly recommend this new setting for any scalable production database. Read more about when it is applicable in the following article: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql90/html/sql2k5snapshotisol.asp
Cascading delete foreign key option
The current version of SQL Server 2005 does not support the creation of the necessary schema to run the following tests:
testJoinedSubclass(org.hibernate.test.ondelete.OnDeleteTest)
testCompositeUserType(org.hibernate.test.cut.CompositeUserTypeTest)
testOnCascadeDelete(org.hibernate.test.legacy.FooBarTest)
It is not possible to introduce a foreign key constraint that may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints if you run into this situation. Microsoft plans to remove this limitation in a future version of SQL Server 2005.
No support for ANSI SQL trim() function
Microsoft SQL Server 2005 does not support the ANSI SQL trim() function, it had to be emulated in the SQLServerDialect, so it can be directly supported in HQL and EJB-QL. Microsoft recommends to emulate it with ltrim() and rtrim() in plain SQL.
No support for ANSI SQL row value constructor
Microsoft SQL Server 2005 does not support the ANSI SQL tuple syntax, for example: select * from Emp where (firstname, lastname) = ("John", "Doe") results in an exception. Any SQL statement will have to prefix and fully qualify any attributes. This rule also applies to HQL and EJB-QL. Microsoft plans to support this syntax in the future.
Only fully scrollable cursors supported for Eager Fetching
The tested release of the JDBC Driver does not allow invoking isAfterLast() and isBeforeLast() on forward-only scrolling cursors. This prohibits Hibernate from doing collection fetching when using ScrollableResults. The workaround is to not use forward-only scrolling cursors in this specific scenario. Microsoft plans to remove this limitation in a future release of the driver.
DataDirect (Oracle 10g)
| Vendor/Partner: | DataDirect Technologies |
| Certification Date: | February 2006 |
| Hibernate version: | Hibernate Core for Java 3.1.3 (to be released) |
| Hibernate dialect: | org.hibernate.dialect.DataDirectOracle9Dialect (bundled) |
| JDBC Driver: | DataDirect Connect for JDBC, Release 3.5, Service Pack 3 |
| DBMS: | Oracle Database 10g Express Edition |
| DBMS Operating System: | Microsoft Windows XP SP2 |
| Client Operating System: | Microsoft Windows XP SP2 |
| Client Java version: | Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_03-b07) |
Remarks and guidelines
Generated Keys
The DataDirect Connect for JDBC driver does not support the retrieval of generated keys after an insertion (JDBC 3.0) on Oracle DBMS. Disable this feature in the Hibernate configuration by setting hibernate.get_generated_keys to false. DataDirect Technologies will address this feature in a future version of their driver.
InterSystems Cache' 2007.1
| Vendor/Partner: | InterSystems Corporation |
| Certification Date: | November 2006 |
| Hibernate version: | Hibernate Core for Java 3.2.1 |
| Hibernate dialect: | org.hibernate.dialect.Cache71Dialect (bundled) |
| JDBC Driver: | CacheDB.jar 2007.1.0.253 |
| DBMS: | InterSystems Cache' 2007.1 |
| DBMS Operating System: | Microsoft Windows XP Professional |
| Client Operating System: | Microsoft Windows XP Professional |
| Client Java version: | Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06) |
Remarks and guidelines
No support for ANSI SQL row value constructor
Cache' 2007.1 does not support the ANSI SQL "row value constructor" syntax. For example: select * from Emp where (firstname, lastname) = ("John", "Doe") results in an exception. This limits the ability to utilize components (or any multi-column value) from within HQL and Criteria queries.
No support for ANSI SQL extract() function
Cache' 2007.1 does not support the ANSI SQL extract() function.
Only fully scrollable cursors supported for Eager Fetching
The tested release of the JDBC Driver does not allow invoking isAfterLast() and isBeforeLast() on forward-only scrolling cursors. This prohibits Hibernate from doing collection fetching when using ScrollableResults. The workaround is to not use forward-scrolling cursors in this specific scenario.
Self-referential foreign key issue
Cache' 2007.1 does not allow deletion of a row when it has a self-referential foreign key value referring to itself. In such scenarios, the foreign key must be manually nullified prior to deleting the row.
LONGVARCHAR and LONGVARBINARY restrictions
Cache' 2007.1 places various restrictions on the usage of LONGVARCHAR and LONGVARBINARY columns. Two in particular that caused problems during certification were:
- LONGVARCHAR and LONGVARBINARY columns cannot appear in the where clause
- LONGVARCHAR and LONGVARBINARY columns cannot be used in aggregation functions
Users should take care not to user properties mapped to such columns in either of the stated fashions in any Hibernate queries. Additionally, care should be taken when using certain collections (sets, maps and bags) as extra-lazy with elements mapped to columns of type LONGVARCHAR or LONGVARBINARY (e.g. the serializable type). Specifically, attempt to retrieve the collection's size in an extra-lazy manner will result in an error. This is because HIbernate is issuing a query attempting the use the column of the elements in a count aggregation.
Group-by value case insensitivity
In certain situations, Cache5.2 may return a value for a particular column with a different case then what was actually stored in the database when that column is used in the statement's group-by clause.
Teradata 6.1.1
| Vendor/Partner: | NCR-Teradata |
| Certification Date: | March 2007 |
| Hibernate version: | Hibernate Core for Java 3.2.3 |
| Hibernate dialect: | org.hibernate.dialect.TeradataDialect (bundled) |
| JDBC Driver: | TTU8.2 Windows i386 TeraJDBC.03.04.00.00 |
| DBMS: | Teradata Database Version 2 Release 6.1.1 |
| DBMS Operating System: | MP RAS 3.0.2 |
| Client Operating System: | Microsoft Windows XP SP2 |
| Client Java version: | Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_10) |
Remarks and guidelines
Generated Keys
The Teradata system does not support the retrieval of generated keys after an insertion via the JDBC3 getGeneratedKeys method. This feature has been disabled in the Dialect.
Limited support for row-value-constructor syntax
Teradata does not support use of row-value-constructor as an IN list value, which limits the ability to utilize components (or any multi-column value) from within HQL and Criteria queries: where (ADDRESS, ZIP, COUNTRY) in ( (?,?,?), (?,?,?) )
SELECT column list cannot contain sub-query
Teradata does not support SELECT clause with a sub-query as an element of the column list: select XYZ, (select max(Z) from Y) from Y
Parameters not supported as function/procedure arguments
Teradata does not support using bind parameters as arguments to functions or stored procedures: select abs(COST-?) from PRODUCT
READ_COMMITTED isolation causes writers to block readers
Teradata ensures READ_COMMITTED transaction isolation by having write-locks block attempts to acquire read-locks. In that way, a reader is forced to wait until the writer process releases its lock at the end of the transaction; thus the reader will only ever see the committed data. This approach seriously limits concurrent access.
REPEATABLE_READ isolation causes readers to block writers
Teradata ensures REPEATABLE_READ transaction isolation by having read-locks block attempts to acquire write-locks. In that way, a writer is forced to wait until the reader process releases its lock at the end of the transaction; thus the reader is assured of being able to read the same data in a repeatable manner throughout the transaction. This approach seriously limits concurrent access.
LOB support
It is not recommended to use LOBs with Teradata through its JDBC driver. While it is possible to store LOB values into Teradata through its JDBC driver, those LOBs cannot be retrieved or mutated through the driver.
Batching support
The Teradata JDBC driver does not support JDBC batching
getTimeStamp support
The driver does not support the current_date, current_time, or current_timestamp functions.
Index creation
Teradata requires an index creation statement of the form create index (column list) on table. This is currently not supported in Hibernate. This is only a problem if the schema is expected to be exported by hibernate.
Ingres 2006
| Vendor/Partner: | Ingres Corporation |
| Certification Date: | October 2007 |
| Hibernate version: | Hibernate Core for Java 3.2.4 |
| Hibernate dialect: | org.hibernate.dialect.IngresDialect (bundled*) |
| JDBC Driver: | Ingres Corporation Ingres JDBC Driver, Version 3.0 |
| DBMS: | Ingres 2006 Release 2 |
| DBMS Operating System: | Red Hat Enterprise Linux 4 |
| Client Operating System: | Red Hat Enterprise Linux 4 |
| Client Java version: | Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_10) |
Remarks and guidelines
Bundled dialect
Note that the version of Hibernate certified against is 3.2.4, but that the dialect which is actually certified is only bundled in 3.2.5 and later (http://opensource.atlassian.com/projects/hibernate/browse/HHH-2758).
Scrolling Cursors
Ingres 2006 Release 2 supports forward scrolling cursors but does not include support for reverse scrolling cursors and cursor type TYPE_SCROLL_INSENSITIVE. The workaround is to use forward scrolling cursors only. Ingres plans to remove this limitation in a future release.
Large Object Support
The JDBC driver shipped with Ingres 2006 Release 2 does not fully support reading and writing of large objects. Because of this fact, it has been disabled within the dialect. Ingres plans to integrate full support in a future driver release.
Sub-selects in the select clause
Ingres 2006 Release 2 does not support sub-selects in the select clause. Hibernate itself does not make use of this construct: it would be only used in user queries. Ingres plans to integrate support in a future release.
BigDecimal support
For compatibility reasons, the JDBC driver shipped with Ingres 2006 Release 2 is built with Java 1.4. Because of the differences between the BigDecimal?.toString() method in 1.4 and 5.0, there could be problems when using the exponential form for e.g. very small numbers. This will be changed in a future release.
ANSI Date/Time support
Ingres 2006 Release 2 supports the ANSI Date and Time data types. Nested outer joins which join on columns of the new ANSI date/time types can get "bad length" errors or an E_OP08A5 error with Ingres 9.1.0 build 123. This problem has been identified as issue 116903 and the associated bug 118076 is now fixed. A patch is available on request from Ingres Technical Support.