Member Menu
 
 Monthly JBoss newsletter:
 
Java Persistence with Hibernate
CaveatEmptor

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.

© Copyright 2006, Red Hat Middleware, LLC. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc. [Privacy Policy]