diff --git a/annotations/src/test/java/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java b/annotations/src/test/java/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java index 03fc38d1a4..9c89dd789a 100644 --- a/annotations/src/test/java/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java +++ b/annotations/src/test/java/org/hibernate/test/annotations/entity/BasicHibernateAnnotationsTest.java @@ -276,6 +276,40 @@ public class BasicHibernateAnnotationsTest extends TestCase { tx.commit(); s.close(); } + + + public void testFilterOnCollection() { + + Session s = openSession(); + Transaction tx = s.beginTransaction(); + + Topic topic = new Topic(); + Narrative n1 = new Narrative(); + n1.setState("published"); + topic.addNarrative(n1); + + Narrative n2 = new Narrative(); + n2.setState("draft"); + topic.addNarrative(n2); + + s.persist(topic); + tx.commit(); + s.close(); + + s = openSession(); + tx = s.beginTransaction(); + topic = (Topic) s.load( Topic.class, topic.getId() ); + + s.enableFilter("byState").setParameter("state", "published"); + topic = (Topic) s.load( Topic.class, topic.getId() ); + assertNotNull(topic); + assertTrue(topic.getNarratives().size() == 1); + assertEquals("published", topic.getNarratives().iterator().next().getState()); + tx.commit(); + s.close(); + + } + public void testFilter() throws Exception { Session s; @@ -496,7 +530,9 @@ public class BasicHibernateAnnotationsTest extends TestCase { FormalLastName.class, Car.class, Peugot.class, - ContactDetails.class + ContactDetails.class, + Topic.class, + Narrative.class }; } diff --git a/annotations/src/test/java/org/hibernate/test/annotations/entity/Narrative.java b/annotations/src/test/java/org/hibernate/test/annotations/entity/Narrative.java new file mode 100644 index 0000000000..0ca053bdd5 --- /dev/null +++ b/annotations/src/test/java/org/hibernate/test/annotations/entity/Narrative.java @@ -0,0 +1,66 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * Copyright (c) 2009, Red Hat, Inc. and/or its affiliates or third-party contributors as + * indicated by the @author tags or express copyright attribution + * statements applied by the authors. All third-party contributions are + * distributed under license by Red Hat, Inc. + * + * This copyrighted material is made available to anyone wishing to use, modify, + * copy, or redistribute it subject to the terms and conditions of the GNU + * Lesser General Public License, as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this distribution; if not, write to: + * Free Software Foundation, Inc. + * 51 Franklin Street, Fifth Floor + * Boston, MA 02110-1301 USA + */ + +package org.hibernate.test.annotations.entity; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.ManyToOne; + +/** + * @author Sharath Reddy + */ +@Entity +public class Narrative { + + private int id; + private String state; + private Topic topic; + + @Id @GeneratedValue + public int getId() { + return id; + } + public void setId(int id) { + this.id = id; + } + + @Column(name="state") + public String getState() { + return state; + } + public void setState(String state) { + this.state = state; + } + + @ManyToOne + public Topic getTopic() { + return topic; + } + public void setTopic(Topic topic) { + this.topic = topic; + } +} diff --git a/annotations/src/test/java/org/hibernate/test/annotations/entity/Topic.java b/annotations/src/test/java/org/hibernate/test/annotations/entity/Topic.java new file mode 100644 index 0000000000..5d55b3d81f --- /dev/null +++ b/annotations/src/test/java/org/hibernate/test/annotations/entity/Topic.java @@ -0,0 +1,72 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * Copyright (c) 2009, Red Hat, Inc. and/or its affiliates or third-party contributors as + * indicated by the @author tags or express copyright attribution + * statements applied by the authors. All third-party contributions are + * distributed under license by Red Hat, Inc. + * + * This copyrighted material is made available to anyone wishing to use, modify, + * copy, or redistribute it subject to the terms and conditions of the GNU + * Lesser General Public License, as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this distribution; if not, write to: + * Free Software Foundation, Inc. + * 51 Franklin Street, Fifth Floor + * Boston, MA 02110-1301 USA + */ + +package org.hibernate.test.annotations.entity; + +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; + +import org.hibernate.annotations.Filter; +import org.hibernate.annotations.FilterDef; +import org.hibernate.annotations.ParamDef; + +/** + * @author Sharath Reddy + */ +@FilterDef(name="byState", defaultCondition=":state = state", + parameters=@ParamDef(name="state",type="string")) +@Entity +public class Topic { + + @Id @GeneratedValue + private int id; + @OneToMany(mappedBy="topic", cascade=CascadeType.ALL) + @Filter(name="byState", condition=":state = state") + private Set narratives = new HashSet(); + + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public Set getNarratives() { + return narratives; + } + + public void addNarrative(Narrative val) { + narratives.add(val); + val.setTopic(this); + } + +}