diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/TableJDBCSeq.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/TableJDBCSeq.java index c2eedf5b1..8d0ff32c0 100644 --- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/TableJDBCSeq.java +++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/TableJDBCSeq.java @@ -595,6 +595,8 @@ public class TableJDBCSeq String tableName; if (sName == null) tableName = table.getFullName(); + else if (table.getSchemaName() != null) + tableName = table.getFullName(); else tableName = sName + "." + table.getName(); return tableName; diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/generationtype/DogTable3.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/generationtype/DogTable3.java new file mode 100644 index 000000000..83c2ad83a --- /dev/null +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/generationtype/DogTable3.java @@ -0,0 +1,87 @@ +/* + * 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.generationtype; + +import java.io.*; +import javax.persistence.*; + +/** + * Extension of Animal class illustrating inheritance. + */ +@Entity(name = "DogTable3") +@Table(name = "DOGTABLES", schema = "SCHEMA3") +public class DogTable3 implements Serializable + +{ + @Id + @TableGenerator(name = "Dog_Gen3", table = "ID_Gen3", schema="SCHEMA3G", + pkColumnName = "GEN_NAME", valueColumnName = "GEN_VAL", + pkColumnValue = "ID2", initialValue = 100, allocationSize = 10) + @GeneratedValue(strategy = GenerationType.TABLE, generator = "Dog_Gen3") + private int id2; + + private String name; + + private float price; + + private boolean domestic; + + public DogTable3() { + super(); + + } + + public DogTable3(String name) { + this.name = name; + + } + + public int getId2() { + return id2; + } + + public void setId2(int id) { + this.id2 = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public float getPrice() { + return price; + } + + public void setPrice(float price) { + + this.price = price; + } + + public boolean isDomestic() { + return domestic; + } + + public void setDomestic(boolean domestic) { + this.domestic = domestic; + } +} diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/generationtype/DogTable4.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/generationtype/DogTable4.java new file mode 100644 index 000000000..8d08cd388 --- /dev/null +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/generationtype/DogTable4.java @@ -0,0 +1,87 @@ +/* + * 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.generationtype; + +import java.io.*; +import javax.persistence.*; + +/** + * Extension of Animal class illustrating inheritance. + */ +@Entity(name = "DogTable4") +@Table(name = "DOGTABLES4") +public class DogTable4 implements Serializable + +{ + @Id + @TableGenerator(name = "Dog_Gen4", table = "ID_Gen4", schema="SCHEMA4G", + pkColumnName = "GEN_NAME", valueColumnName = "GEN_VAL", + pkColumnValue = "ID2", initialValue = 100, allocationSize = 10) + @GeneratedValue(strategy = GenerationType.TABLE, generator = "Dog_Gen4") + private int id2; + + private String name; + + private float price; + + private boolean domestic; + + public DogTable4() { + super(); + + } + + public DogTable4(String name) { + this.name = name; + + } + + public int getId2() { + return id2; + } + + public void setId2(int id) { + this.id2 = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public float getPrice() { + return price; + } + + public void setPrice(float price) { + + this.price = price; + } + + public boolean isDomestic() { + return domestic; + } + + public void setDomestic(boolean domestic) { + this.domestic = domestic; + } +} diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/generationtype/TestMultipleSchemaNames.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/generationtype/TestMultipleSchemaNames.java index 94310df54..ba841886b 100644 --- a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/generationtype/TestMultipleSchemaNames.java +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/generationtype/TestMultipleSchemaNames.java @@ -26,7 +26,8 @@ import org.apache.openjpa.persistence.test.SingleEMFTestCase; public class TestMultipleSchemaNames extends SingleEMFTestCase { public void setUp() { - setUp(Dog1.class, Dog2.class, DogTable.class, DogTable2.class); + setUp(Dog1.class, Dog2.class, DogTable.class, DogTable2.class, + DogTable3.class, DogTable4.class); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); @@ -60,6 +61,22 @@ public class TestMultipleSchemaNames extends SingleEMFTestCase { em.remove(Obj); } + Query qry5 = em.createQuery("select d from DogTable3 d"); + List result5 = qry5.getResultList(); + + for (int index = 0; index < result5.size(); index++) { + DogTable3 Obj = (DogTable3) result5.get(index); + em.remove(Obj); + } + + Query qry6 = em.createQuery("select d from DogTable4 d"); + List result6 = qry6.getResultList(); + + for (int index = 0; index < result6.size(); index++) { + DogTable4 Obj = (DogTable4) result6.get(index); + em.remove(Obj); + } + Query delschema1 = em .createNativeQuery("delete from schema1.openjpa_sequence_table"); delschema1.executeUpdate(); @@ -71,8 +88,15 @@ public class TestMultipleSchemaNames extends SingleEMFTestCase { Query delgentable2 = em .createNativeQuery("delete from schema2.id_gen2"); delgentable2.executeUpdate(); + Query delgentable3 = em + .createNativeQuery("delete from schema3g.id_gen3"); + delgentable3.executeUpdate(); + Query delgentable4 = em + .createNativeQuery("delete from schema4g.id_gen4"); + delgentable4.executeUpdate(); em.getTransaction().commit(); + em.close(); } @@ -177,8 +201,30 @@ public class TestMultipleSchemaNames extends SingleEMFTestCase { dog2a.setName("helloDog4"); dog2a.setPrice(25000); em.persist(dog2a); - em.getTransaction().commit(); + // add dog3 + DogTable3 dog3 = new DogTable3(); + dog3.setName("helloDog5"); + dog3.setPrice(15001); + em.persist(dog3); + + DogTable3 dog3a = new DogTable3(); + dog3a.setName("helloDog6"); + dog3a.setPrice(25001); + em.persist(dog3a); + + // add dog4 + DogTable4 dog4 = new DogTable4(); + dog4.setName("helloDog7"); + dog4.setPrice(15002); + em.persist(dog4); + + DogTable4 dog4a = new DogTable4(); + dog4a.setName("helloDog8"); + dog4a.setPrice(25002); + em.persist(dog4a); + em.getTransaction().commit(); + DogTable dog1x = em.find(DogTable.class, kem.getObjectId(dog1)); assertTrue(dog1x.getId2() == 20 || dog1x.getId2() == 21); assertEquals(dog1x.getName(), "helloDog1"); @@ -189,6 +235,7 @@ public class TestMultipleSchemaNames extends SingleEMFTestCase { assertEquals(dog11.getName(), "helloDog2"); dog11.setName("Dog2"); dog11.setDomestic(true); + // update dog2 DogTable2 dog2x = em.find(DogTable2.class, kem.getObjectId(dog2)); assertTrue(dog2x.getId2() == 100 || dog2x.getId2() == 101); @@ -196,21 +243,45 @@ public class TestMultipleSchemaNames extends SingleEMFTestCase { dog2x.setName("Dog3"); dog2x.setDomestic(true); DogTable2 dog21 = em.find(DogTable2.class, kem.getObjectId(dog2a)); - assertTrue(dog2x.getId2() == 100 || dog2x.getId2() == 101); + assertTrue(dog21.getId2() == 100 || dog21.getId2() == 101); assertEquals(dog21.getName(), "helloDog4"); dog21.setName("Dog4"); dog21.setDomestic(true); + // update dog3 + DogTable3 dog3x = em.find(DogTable3.class, kem.getObjectId(dog3)); + assertTrue(dog3x.getId2() == 100 || dog3x.getId2() == 101); + assertEquals(dog3x.getName(), "helloDog5"); + dog3x.setName("Dog5"); + dog3x.setDomestic(true); + DogTable3 dog31 = em.find(DogTable3.class, kem.getObjectId(dog3a)); + assertTrue(dog31.getId2() == 100 || dog31.getId2() == 101); + assertEquals(dog31.getName(), "helloDog6"); + dog31.setName("Dog6"); + dog31.setDomestic(true); + + // update dog4 + DogTable4 dog4x = em.find(DogTable4.class, kem.getObjectId(dog4)); + assertTrue(dog4x.getId2() == 100 || dog4x.getId2() == 101); + assertEquals(dog4x.getName(), "helloDog7"); + dog4x.setName("Dog7"); + dog4x.setDomestic(true); + DogTable4 dog41 = em.find(DogTable4.class, kem.getObjectId(dog4a)); + assertTrue(dog41.getId2() == 100 || dog41.getId2() == 101); + assertEquals(dog41.getName(), "helloDog8"); + dog41.setName("Dog8"); + dog41.setDomestic(true); + // get the update dog name em.getTransaction().begin(); Query qry1 = em.createQuery("select d from DogTable d order by d.name"); List result1 = qry1.getResultList(); for (int index = 0; index < result1.size(); index++) { - DogTable dog4 = (DogTable) result1.get(index); - assertTrue(dog4.getId2() == 20 || dog4.getId2() == 21); + DogTable dog1xx = (DogTable) result1.get(index); + assertTrue(dog1xx.getId2() == 20 || dog1xx.getId2() == 21); int j = index + 1; - assertEquals(dog4.getName(), "Dog" + j); + assertEquals(dog1xx.getName(), "Dog" + j); } @@ -219,10 +290,32 @@ public class TestMultipleSchemaNames extends SingleEMFTestCase { List result2 = qry2.getResultList(); for (int index = 0; index < result2.size(); index++) { - DogTable2 dog5 = (DogTable2) result2.get(index); - assertTrue(dog5.getId2() == 100 || dog5.getId2() == 101); + DogTable2 dog2xx = (DogTable2) result2.get(index); + assertTrue(dog2xx.getId2() == 100 || dog2xx.getId2() == 101); int j = index + 3; - assertEquals(dog5.getName(), "Dog" + j); + assertEquals(dog2xx.getName(), "Dog" + j); + } + + Query qry3 = em + .createQuery("select d from DogTable3 d order by d.name"); + List result3 = qry3.getResultList(); + + for (int index = 0; index < result3.size(); index++) { + DogTable3 dog3xx = (DogTable3) result3.get(index); + assertTrue(dog3xx.getId2() == 100 || dog3xx.getId2() == 101); + int j = index + 5; + assertEquals(dog3xx.getName(), "Dog" + j); + } + + Query qry4 = em + .createQuery("select d from DogTable4 d order by d.name"); + List result4 = qry4.getResultList(); + + for (int index = 0; index < result4.size(); index++) { + DogTable4 dog4xx = (DogTable4) result4.get(index); + assertTrue(dog4xx.getId2() == 100 || dog4xx.getId2() == 101); + int j = index + 7; + assertEquals(dog4xx.getName(), "Dog" + j); } em.getTransaction().commit();