From ead852dc38f623f3ec4cfa8a20be71a368211762 Mon Sep 17 00:00:00 2001 From: Michael Dick Date: Wed, 17 Dec 2008 21:59:09 +0000 Subject: [PATCH] OPENJPA-777 committing testcase from Fay's patch git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@727530 13f79535-47bb-0310-9956-ffa450edef68 --- .../persistence/annotations/PColl_EmbedB.java | 46 +++++++ .../annotations/PColl_EntityA.java | 68 ++++++++++ .../annotations/PColl_EntityA1.java | 68 ++++++++++ .../annotations/PColl_EntityB.java | 46 +++++++ .../annotations/PColl_EntityC.java | 48 +++++++ .../annotations/TestPersistentCollection.java | 119 ++++++++++++++++++ 6 files changed, 395 insertions(+) create mode 100644 openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/PColl_EmbedB.java create mode 100644 openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/PColl_EntityA.java create mode 100644 openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/PColl_EntityA1.java create mode 100644 openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/PColl_EntityB.java create mode 100644 openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/PColl_EntityC.java create mode 100644 openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/TestPersistentCollection.java diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/PColl_EmbedB.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/PColl_EmbedB.java new file mode 100644 index 000000000..a6f483287 --- /dev/null +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/PColl_EmbedB.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openjpa.persistence.annotations; +import javax.persistence.CascadeType; +import javax.persistence.Embeddable; +import javax.persistence.ManyToOne; + +@Embeddable +public class PColl_EmbedB { + private String name; + + @ManyToOne(cascade = CascadeType.PERSIST) + private PColl_EntityC m2oC; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public PColl_EntityC getM2oC() { + return m2oC; + } + + public void setM2oC(PColl_EntityC m2oC) { + this.m2oC = m2oC; + } +} diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/PColl_EntityA.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/PColl_EntityA.java new file mode 100644 index 000000000..072536f8a --- /dev/null +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/PColl_EntityA.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openjpa.persistence.annotations; +import java.util.HashSet; +import java.util.Set; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; +import javax.persistence.Version; + +import org.apache.openjpa.persistence.PersistentCollection; + +@Entity +@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) +public class PColl_EntityA { + + @Id + private int id; + + @PersistentCollection(elementEmbedded = true) + private Set embedCollection = new HashSet(); + + @Version + private int version; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public Set getEmbedCollection() { + return embedCollection; + } + + public void setEmbedCollection(Set embedCollection) { + this.embedCollection = embedCollection; + } + + public void addEmbedElement(PColl_EmbedB element) { + this.embedCollection.add(element); + } + + public String toString() { + return "PColl_EntityD"; + } +} diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/PColl_EntityA1.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/PColl_EntityA1.java new file mode 100644 index 000000000..59e67da81 --- /dev/null +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/PColl_EntityA1.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openjpa.persistence.annotations; +import java.util.HashSet; +import java.util.Set; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; +import javax.persistence.Version; + +import org.apache.openjpa.persistence.PersistentCollection; + +@Entity +@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) +public class PColl_EntityA1 { + + @Id + private int id; + + @PersistentCollection(elementEmbedded = true) + private Set embedCollection = new HashSet(); + + @Version + private int version; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public Set getEmbedCollection() { + return embedCollection; + } + + public void setEmbedCollection(Set embedCollection) { + this.embedCollection = embedCollection; + } + + public void addEmbedElement(PColl_EntityB element) { + this.embedCollection.add(element); + } + + public String toString() { + return "PColl_EntityD"; + } +} diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/PColl_EntityB.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/PColl_EntityB.java new file mode 100644 index 000000000..fa4e20cf9 --- /dev/null +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/PColl_EntityB.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openjpa.persistence.annotations; +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.ManyToOne; + +@Entity +public class PColl_EntityB { + private String name; + + @ManyToOne(cascade = CascadeType.PERSIST) + private PColl_EntityC m2oC; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public PColl_EntityC getM2oC() { + return m2oC; + } + + public void setM2oC(PColl_EntityC m2oC) { + this.m2oC = m2oC; + } +} diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/PColl_EntityC.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/PColl_EntityC.java new file mode 100644 index 000000000..81c220a18 --- /dev/null +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/PColl_EntityC.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openjpa.persistence.annotations; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; +import javax.persistence.Version; + +@Entity +@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) +public class PColl_EntityC { + @Id + private int id; + + @Version + private int version; + + public int getId() { + return id; + + } + + public void setId(int id) { + this.id = id; + } + + public String toString() { + return "PColl_EntityC"; + } +} diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/TestPersistentCollection.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/TestPersistentCollection.java new file mode 100644 index 000000000..6c30242a8 --- /dev/null +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/annotations/TestPersistentCollection.java @@ -0,0 +1,119 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openjpa.persistence.annotations; + +import java.util.List; +import java.util.Set; + +import javax.persistence.EntityManager; +import javax.persistence.Query; + +import org.apache.openjpa.persistence.test.SingleEMFTestCase; + +/** + * Test for PersistentCollection Annotation + * + * @author Albert Lee + */ +public class TestPersistentCollection extends SingleEMFTestCase { + + public void setUp() { + setUp(PColl_EntityA.class, PColl_EmbedB.class, PColl_EntityC.class, + PColl_EntityA1.class, PColl_EntityB.class, CLEAR_TABLES); + } + + @SuppressWarnings("unchecked") + public void testPersistentCollectionOfEmbeddables() { + try { + EntityManager em = emf.createEntityManager(); + + em.getTransaction().begin(); + + PColl_EntityC c = new PColl_EntityC(); + c.setId(101); + + PColl_EmbedB b01 = new PColl_EmbedB(); + b01.setName("b01"); + b01.setM2oC(c); + + PColl_EntityA a = new PColl_EntityA(); + a.setId(1); + a.getEmbedCollection().add(b01); + em.persist(a); + em.getTransaction().commit(); + em.close(); + + em = emf.createEntityManager(); + Query q = em.createQuery("SELECT o FROM PColl_EntityA o"); + List oList = (List) q.getResultList(); + PColl_EntityA d1 = oList.get(0); + + Set b1s = d1.getEmbedCollection(); + + PColl_EmbedB b1 = b1s.iterator().next(); + PColl_EntityC c1 = b1.getM2oC(); + assertEquals("b01", b1.getName()); + assertEquals(101, c1.getId()); + assertEquals(1, d1.getId()); + em.close(); + } catch (Throwable t) { + fail(t.getMessage()); + } + } + + @SuppressWarnings("unchecked") + public void testPersistentCollectionOfEntities() { + try { + EntityManager em = emf.createEntityManager(); + + em.getTransaction().begin(); + + PColl_EntityC c = new PColl_EntityC(); + c.setId(101); + + PColl_EntityB b01 = new PColl_EntityB(); + b01.setName("b01"); + b01.setM2oC(c); + + PColl_EntityA1 a = new PColl_EntityA1(); + a.setId(1); + a.getEmbedCollection().add(b01); + em.persist(a); + em.getTransaction().commit(); + em.close(); + + em = emf.createEntityManager(); + Query q = em.createQuery("SELECT o FROM PColl_EntityA1 o"); + List oList = + (List) q.getResultList(); + PColl_EntityA1 a1 = oList.get(0); + + Set b1s = a1.getEmbedCollection(); + + PColl_EntityB b1 = b1s.iterator().next(); + PColl_EntityC c1 = b1.getM2oC(); + assertEquals("b01", b1.getName()); + assertEquals(101, c1.getId()); + assertEquals(1, a1.getId()); + em.close(); + } catch (Throwable t) { + fail(t.getMessage()); + } + } +}