]
Quentin Ambard updated HHH-6518:
--------------------------------
Attachment: CORRECThibernateTestCase.tar.gz
I forget to remove an old class "Container" from the previous mapping test case.
This one is the correct one.
Request malformed on a left fetch join subItem.myCollection (double
outer join) : uncorrect fromElementList, can't find the associated collectionOwner and
initialize a proxy on an empty fetched collection
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Key: HHH-6518
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-6518
Project: Hibernate Core
Issue Type: Bug
Components: core, query-sql
Affects Versions: 3.6.6, 4.0.0.Beta4
Reporter: Quentin Ambard
Labels: HQL, Parser, proxy
Attachments: CORRECThibernateTestCase.tar.gz, hibernateTestCase.tar.gz
There is an error fetching a collection of a subitem.
This affect empty collections : a proxy is intialized on the collection, even fetched.
Accessing to this collection fire a new request.
Here is a simple mode. Please see test case for complete implementation:
@Entity
@Table( name = "ITEM" )
public class Item {
@Id
@GeneratedValue
private Long id;
@OneToOne(cascade = { CascadeType.ALL }, optional = true, fetch = FetchType.LAZY,
orphanRemoval = true)
@JoinColumn(name = "SUB_ITEM_ID")
private SubItem subItem ;
...
}
public class SubItem {
@Id
@GeneratedValue
private Long id;
@ElementCollection(targetClass = String.class, fetch = FetchType.LAZY)
@CollectionTable(name = "PHONES")
@Column(name = "PHONE", nullable = false)
private List<String> phones ;
...
}
the following hql request "from Item i left join fetch i.subItem left join fetch
i.subItem.phones" generates this sql request :
select item0_.id as id2_0_, subitem1_.id as id1_1_, item0_.SUB_ITEM_ID as SUB2_2_0_,
phones3_.SubItem_id as SubItem1_1_0__, phones3_.PHONE as PHONE0__, phones3_.SubItem_id as
SubItem1_1_0__, phones3_.PHONE as PHONE0__
from ITEM item0_
left outer join SUB_ITEM subitem1_ on item0_.SUB_ITEM_ID=subitem1_.id
left outer join SUB_ITEM subitem2_ on item0_.SUB_ITEM_ID=subitem2_.id
left outer join PHONES phones3_ on subitem2_.id=phones3_.SubItem_id
There is an extra left outerjoin.
QueryClassLoader.initialize(SelectClause selectClause) can't find the collectionOwner
for the PHONES collection :
collectionFromElement.getOrigin()is about the second left outer join : "SUB_ITEM
subitem2_ on item0_.SUB_ITEM_ID=subitem2_.id" and the fromElementList is based on the
first outer join "subitem1_ on item0_.SUB_ITEM_ID=subitem1_.id".
The following hql request doesn't work either :
from Item i left join fetch i.subItem s left join fetch s.phones
Request is correctly generated, but the left outer join collectionPersisters is null
java.lang.NullPointerException
at org.hibernate.loader.BasicLoader.isBag(BasicLoader.java:97)
at org.hibernate.loader.BasicLoader.postInstantiate(BasicLoader.java:76)
at org.hibernate.loader.hql.QueryLoader.<init>(QueryLoader.java:120)
at
org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:204)
...
see attached test case for full stack
--
This message is automatically generated by JIRA.
For more information on JIRA, see: