[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-1904) Identifier too long (reborn)

Santiago Ennis (JIRA) noreply at atlassian.com
Sun Nov 21 02:39:14 EST 2010


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-1904?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=39178#action_39178 ] 

Santiago Ennis commented on HHH-1904:
-------------------------------------

Faced the same problem last night...

DenormalizedTable#createForeignKeys() generates longer and longer ForeignKey names; which results in "identifier is too long" ERROR while schema export. I think the method generated longer names when there are three or more entities in the inheritance hierarchy and the InheritanceType is TABLE_PER_CLASS. If there are three or more entities in the inheritance hierarchy but the InheritanceType is NOT TABLE_PER_CLASS, SchemaExport does not show any errors.

See the output of SchemaExportTest.java (test-case attached) :-
===============================================================
SchemaExport:262 - exporting generated schema to database

SchemaExport:415 - drop table employee cascade constraints
SchemaExport:415 - drop table organization cascade constraints
SchemaExport:415 - drop table software_developer cascade constraints
SchemaExport:415 - drop table users cascade constraints

SchemaExport:415 - create table employee (id varchar2(255 char) not null, organization_entity_id varchar2(255 char) not null, user_name varchar2(255 char) not null, first_name varchar2(255 char), last_name varchar2(255 char), primary key (id))
SchemaExport:415 - create table organization (entity_id varchar2(255 char) not null, name varchar2(255 char) not null unique, primary key (entity_id))
SchemaExport:415 - create table software_developer (id varchar2(255 char) not null, organization_entity_id varchar2(255 char) not null, user_name varchar2(255 char) not null, first_name varchar2(255 char), last_name varchar2(255 char), core_skill varchar2(255 char), primary key (id))
SchemaExport:415 - create table users (id varchar2(255 char) not null, organization_entity_id varchar2(255 char) not null, user_name varchar2(255 char) not null, primary key (id))

SchemaExport:415 - alter table employee add constraint FK4692D487849C3FF6a68e084722e6ae foreign key (organization_entity_id) references organization
SchemaExport:386 - Unsuccessful: alter table employee add constraint FK4692D487849C3FF6a68e084722e6ae foreign key (organization_entity_id) references organization
SchemaExport:387 - ORA-00972: identifier is too long

SchemaExport:415 - alter table software_developer add constraint FK4692D487849C3FF6a68e084722e6aea409f32 foreign key (organization_entity_id) references organization
SchemaExport:386 - Unsuccessful: alter table software_developer add constraint FK4692D487849C3FF6a68e084722e6aea409f32 foreign key (organization_entity_id) references organization
SchemaExport:387 - ORA-00972: identifier is too long

SchemaExport:415 - alter table users add constraint FK4692D487849C3FF6a68e08 foreign key (organization_entity_id) references organization

SchemaExport:281 - schema export complete
==========================================================

One more thing...

Though the SchemaExport completed with errors, the log says, "schema export complete" and the level of log is INFO. 
IMHO, the message should be "schema export complete WITH ERRORS" and the log level should be ERROR(or WARN).

> Identifier too long (reborn)
> ----------------------------
>
>                 Key: HHH-1904
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-1904
>             Project: Hibernate Core
>          Issue Type: Bug
>    Affects Versions: 3.2.0.cr2
>            Reporter: Andrea Aime
>
> I'm following up form HHH-355, basically, foreign keys with names that go well beying 30 chars of lenght.
> I know how to reproduce the problem, and if required I can provide a test case, but let me point you to
> the code path that generates the problem first (and see if that's enough).
> I do have a hierarchy mapped with the table per class approach, with intermediate abstract classes.
> Leaf classes of this hierarchy are apparently managed in hibernate usign the DenormalizedTable class. The code that generates the foreign keys for this class is:
> public void createForeignKeys() {
> includedTable.createForeignKeys();
> Iterator iter = includedTable.getForeignKeyIterator();
> while ( iter.hasNext() ) {
> ForeignKey fk = (ForeignKey) iter.next();
> createForeignKey(
> fk.getName() + Integer.toHexString( getName().hashCode() ),
> fk.getColumns(),
> fk.getReferencedEntityName()
> );
> }
> }
> As you can see, it gets the foreign key name of the contained class, and appends another hexstring. This name can become really long if the
> hierarchy has many levels. In my case I get names as long as: FK14F780C41886F83e63ff56e238e868d73630607.
> Let me know if this is enough or if you need more information.
> Ah, another problem is that the appended foreign parts do not pass thru the naming strategy, and as you can see they're not
> uppercase in my sample (my naming strategy does uppercase everything)

-- 
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