From 97f8ceac9bf21499fa7e158ef5b5fa979ca6d2ac Mon Sep 17 00:00:00 2001 From: Strong Liu Date: Thu, 11 Nov 2010 19:09:50 +0800 Subject: [PATCH] HHH-5727 Collection member declaration not handling optional AS in HQL. --- hibernate-core/src/main/antlr/hql.g | 2 +- .../org/hibernate/test/hql/EntityBean.java | 36 +++++++++++++++++ .../hibernate/test/hql/EntityBeanTest.java | 39 +++++++++++++++++++ .../java/org/hibernate/test/hql/Item.java | 32 +++++++++++++++ 4 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 hibernate-core/src/test/java/org/hibernate/test/hql/EntityBean.java create mode 100644 hibernate-core/src/test/java/org/hibernate/test/hql/EntityBeanTest.java create mode 100644 hibernate-core/src/test/java/org/hibernate/test/hql/Item.java diff --git a/hibernate-core/src/main/antlr/hql.g b/hibernate-core/src/main/antlr/hql.g index 99e4179c09..855715c9a4 100644 --- a/hibernate-core/src/main/antlr/hql.g +++ b/hibernate-core/src/main/antlr/hql.g @@ -360,7 +360,7 @@ inClassDeclaration! ; inCollectionDeclaration! - : IN! OPEN! p:path CLOSE! a:alias { + : IN! OPEN! p:path CLOSE! a:asAlias { #inCollectionDeclaration = #([JOIN, "join"], [INNER, "inner"], #p, #a); } ; diff --git a/hibernate-core/src/test/java/org/hibernate/test/hql/EntityBean.java b/hibernate-core/src/test/java/org/hibernate/test/hql/EntityBean.java new file mode 100644 index 0000000000..cea041ef5a --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/test/hql/EntityBean.java @@ -0,0 +1,36 @@ +package org.hibernate.test.hql; + +import java.util.HashSet; +import java.util.Set; + +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.OneToMany; + +@Entity +public class EntityBean { + @Id + @GeneratedValue + private Long id; + + @OneToMany(cascade=CascadeType.ALL) + private Set items = new HashSet(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Set getItems() { + return items; + } + + public void setItems(Set items) { + this.items = items; + } +} diff --git a/hibernate-core/src/test/java/org/hibernate/test/hql/EntityBeanTest.java b/hibernate-core/src/test/java/org/hibernate/test/hql/EntityBeanTest.java new file mode 100644 index 0000000000..dabac461a8 --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/test/hql/EntityBeanTest.java @@ -0,0 +1,39 @@ +package org.hibernate.test.hql; + +import java.util.List; + +import org.hibernate.Query; +import org.hibernate.Session; +import org.hibernate.test.annotations.TestCase; + +public class EntityBeanTest extends TestCase { + + + @Override + protected Class[] getAnnotatedClasses() { + return new Class[]{EntityBean.class,Item.class}; + } + public void testAAA(){ + Session s=openSession(); + s.beginTransaction(); + Item item = new Item(); + item.setItemValue("1"); + EntityBean eb = new EntityBean(); + eb.getItems().add(item); + item=new Item(); + item.setItemValue("2"); + eb.getItems().add(item); + s.persist(eb); + s.getTransaction().commit(); + s.close(); + + s=openSession(); + s.beginTransaction(); + Query query = s.createQuery("SELECT o FROM EntityBean AS o, IN (o.items) l WHERE l.itemValue = '1'"); + List list = query.list(); + assertEquals(list.size(), 1); + s.getTransaction().commit(); + s.close(); + } + +} diff --git a/hibernate-core/src/test/java/org/hibernate/test/hql/Item.java b/hibernate-core/src/test/java/org/hibernate/test/hql/Item.java new file mode 100644 index 0000000000..7687131a3d --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/test/hql/Item.java @@ -0,0 +1,32 @@ +package org.hibernate.test.hql; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class Item { + @Id + @GeneratedValue + private Long id; + + private String itemValue; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + + public String getItemValue() { + return itemValue; + } + + public void setItemValue(String itemValue) { + this.itemValue = itemValue; + } + +}