[hibernate-issues] [Hibernate-JIRA] Created: (HHH-2964) missing column name due to IndexNode.resolve calling queryableCollection.getIndexColumnNames()

Kay Schubert (JIRA) noreply at atlassian.com
Wed Nov 21 22:53:56 EST 2007


missing column name due to IndexNode.resolve calling queryableCollection.getIndexColumnNames()
----------------------------------------------------------------------------------------------

                 Key: HHH-2964
                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2964
             Project: Hibernate3
          Issue Type: Bug
          Components: query-hql
    Affects Versions: 3.2.5, 3.2.4.sp1, 3.2.4, 3.2.3, 3.2.2, 3.2.1
         Environment: hibernate-core 3.2.5, mysql 5
            Reporter: Kay Schubert
         Attachments: IndexNode.patch

Declared entities:
@Entity
class Book {
  @Id
  long id;
  @OneToMany(mappedBy = "id.book")
  @MapKey(name = "id.stationName")
  private Map<String, StationBooksCounter> stationBooksCounter;
}

@Embeddable
class StationBooksCounterPk {
  String stationName;
  @ManyToOne(optional = false)
  Book book;
}

@Entity
class StationBooksCounter {
  @EmbeddedId
  StationBooksCounterPk id;
  int count;
}

HQL: "from Book b where b.stationBooksCounter['key'].count > '0'" results in that
SQL: "select ... from Book book0_ where exists ( select 1 from StationBooksCounter stationboo3_ where books0_.id=stationboo3_.book_id and stationboo3_.null = 'key' and  and stationboo3_.count>'0')"

(statements text have been deducted from analogous queries in actual application - I didn't actually compile that simplified test case, since I'm quite sure what the problem is)
The "stationboo3_.null" is caused by IndexNode.resolve calling queryableCollection.getIndexColumnNames() to resolve the index column name. Here queryableCollection is an org.hibernate.persister.collection.AbstractCollectionPersister, and  getIndexColumnNames() returns the String[] indexColumnNames, containing only one null element. I changed that to AbstractCollectionPersister.getIndexColumnNames(String tableAlias). It uses indexColumnNames as well as indexFormulaTemplates to build the SQL fragment.

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