[hibernate-issues] [Hibernate-JIRA] Updated: (HBX-700) Custom type mapping is not possible when reverse-engineering types that are not mapped uniquely to java.sql.Types

Max Rydahl Andersen (JIRA) noreply at atlassian.com
Wed Jul 25 02:54:52 EDT 2007


     [ http://opensource.atlassian.com/projects/hibernate/browse/HBX-700?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Max Rydahl Andersen updated HBX-700:
------------------------------------

    Summary: Custom type mapping is not possible when reverse-engineering types that are not mapped uniquely to java.sql.Types  (was: Custom type mapping is not possible when reverse-engineering Oracle TIMESTAMP(3) types)

> Custom type mapping is not possible when reverse-engineering types that are not mapped uniquely to java.sql.Types
> -----------------------------------------------------------------------------------------------------------------
>
>                 Key: HBX-700
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HBX-700
>             Project: Hibernate Tools
>          Issue Type: Bug
>          Components: reverse-engineer
>         Environment: 3.2 svn, Oracle 10g, Oracle JDBC Driver version - "10.2.0.1.0"
>            Reporter: Genandiy Donchyts
>         Attachments: hbm2java.cfg.xml, schema.sql, Test.hbm.xml
>
>   Original Estimate: 1 hour
>  Remaining Estimate: 1 hour
>
> When reverse-engineering Oracle database containint column with TIMESTAMP(3) type it is not recognized as a TIMESTAMP and "serializable" type is used instead of timestamp.  This happens because of the bug in Oracle JDBC driver since it returns OTHER (1111) instead of TIMESTAMP(93).
> When type-mapping is provided in the form:
> <type-mapping>
>         <sql-type jdbc-type="TIMESTAMP(3)" hibernate-type="timestamp" />
> </type-mapping>
> ... it is not used because hibernate can't find TIMESTAMP(3) JDBC data type.
> JDBCReader.java, processBasicColumns(Table table, ProgressListener progress):
> ...
> //TODO: column.setSqlType(sqlTypeName); //this does not work 'cos the precision/scale/length are not retured in TYPE_NAME
> //column.setSqlType(sqlTypeName);
> ...
> it would be nice to have this sqlTypeName set to Column and used during comparison with <type-mapping>, then mapping from "TIMESTAMP(3)" to "timestamp" would work. Currently only 1111 ("OTHER") is passed to Column and as result column does not know anything about "TIMESTAMP(3)"
> -----
> To reproduce an issue try to create simple Oracle database with one table:
> create table test(id TIMESTAMP(3));
> and run reverse-engineering task over it.
> ------
> HACK: custom handling of TIMESTAMP(*) types:
> Modify JDBCReader.java:
> private void processBasicColumns(Table table, ProgressListener progress) { // get the columns
> ...
> 				String sqlTypeName = (String) columnRs.get("TYPE_NAME");
> 				String columnName = (String) columnRs.get("COLUMN_NAME");
> 				// HACK: custom handling of TIMESTAMP(*)
> 					if(sqlTypeName.startsWith("TIMESTAMP")) {
> 					sqlType = java.sql.Types.TIMESTAMP;
> 				}
> ...
> See also forum post: http://forum.hibernate.org/viewtopic.php?t=961625&start=0&postdays=0&postorder=asc&highlight=

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the hibernate-issues mailing list