[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-2988) UnionSubclassEntityPersister.generateSubquery() does not use column.getQuotedName()
Christian Demoustier (JIRA)
noreply at atlassian.com
Thu Sep 10 04:41:16 EDT 2009
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-2988?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=33926#action_33926 ]
Christian Demoustier commented on HHH-2988:
-------------------------------------------
Column.getQuotedName() "returns quoted name as it would be in the mapping file" as from the source file. Therefore an " ` " appears in the generated SQL which is not a valid quote for PostGreSQL or other databases.
It works best if you use :
buf.append( col.getQuotedName(dialect) );
which uses the dialect provided quote character.
> UnionSubclassEntityPersister.generateSubquery() does not use column.getQuotedName()
> -----------------------------------------------------------------------------------
>
> Key: HHH-2988
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2988
> Project: Hibernate Core
> Issue Type: Bug
> Components: core
> Affects Versions: 3.2.5
> Reporter: benoit heinrich
> Priority: Critical
>
> Hi all,
> I'm new to hibernate and I'm trying to use the Inheritance strategy TABLE_PER_CLASS with a Postgres database.
> The postgres database contains tables and column with upper cases names (names must be quoted).
> In the entity I used the back-quote ` sign to quote the table names and column names.
> All basic requests work but when I have an association going to the virtual parent table then I got an error due to the fact that the Union subclass entity persister does not quote the column names inside the sub query.
> I've locate the problem and I think it occurs here:
> org.hibernate.persister.entity.UnionSubclassEntityPersister.java (svn rev. 11398)
> line 395 ------------------------------------------------------------------------------------------------
> while ( citer.hasNext() ) {
> Column col = (Column) citer.next();
> if ( !table.containsColumn(col) ) {
> int sqlType = col.getSqlTypeCode(mapping);
> buf.append( dialect.getSelectClauseNullString(sqlType) )
> .append(" as ");
> }
> buf.append( col.getName() );
> buf.append(", ");
> But should be ------------------------------------------------------------------------------------------------
> buf.append( col.getQuotedName() );
> Here is an example to test:
> Item.java:
> ---------------------------------
> @Entity
> @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
> public abstract class Item implements java.io.Serializable {
> private long id;
> private Container parent;
> /** getter / setter */
>
> @Id
> @Column(name = "`ID`", unique = true, nullable = false, insertable = true, updatable = true)
> @GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "item_id_seq_generator")
> @SequenceGenerator(name="item_id_seq_generator", sequenceName="item_id_seq", allocationSize=1)
> public long getId() {
> return this.id;
> }
> public void setId(long id) {
> this.id = id;
> }
> @ManyToOne(cascade = {}, fetch = FetchType.LAZY)
> @JoinColumn(name = "`ParentID`", unique = false, nullable = true, insertable = true, updatable = true)
> public Container getParent() {
> return this.parent;
> }
> public void setParent(Container parent) {
> this.parent = parent;
> }
> }
> Container.java
> ---------------------------------
> @Entity
> @Table(name = "`CoNTaiNeR`")
> public class Container extends Item {
> private Set<Item> items = new HashSet<Item>(0);
> @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "parent", targetEntity = Item.class)
> public Set<Item> getItems() {
> return this.items;
> }
> public void setItems(Set<Item> items) {
> this.items = items;
> }
> }
> SimpleItem.java
> ---------------------------------
> @Entity
> @Table(name = "`SimpleItem`")
> public class SimpleItem extends Item {
> /*...*/
> }
> So when you try to get the Container.getItems() then it generates the wrong query.
> Cheers,
> /Benoit
--
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