blob: cc89f211baa74ff43f57830da76e23257d5752fe [file] [log] [blame]
/*
* 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.jdbc.kernel;
import javax.persistence.EntityManager;
import org.apache.openjpa.persistence.common.utils.*;
import org.apache.openjpa.persistence.jdbc.common.apps.AutoIncrementPC1;
import org.apache.openjpa.persistence.jdbc.common.apps.AutoIncrementPC2;
import org.apache.openjpa.persistence.jdbc.common.apps.AutoIncrementPC3;
import org.apache.openjpa.persistence.jdbc.common.apps.AutoIncrementPC3Id;
import junit.framework.*;
public class TestEJBAutoIncrement extends BaseJDBCTest
{
// private boolean = Boolean.valueOf(bool);
private int oid2;
private long oid3;
private long oid4, oid2a, oid2b, oid3b;
private long oid3a;
public TestEJBAutoIncrement(String name)
{
super(name);
}
public void setUp()
{
deleteAll(AutoIncrementPC1.class);
deleteAll(AutoIncrementPC2.class);
deleteAll(AutoIncrementPC3.class);
}
@SuppressWarnings("unchecked")
public void testInsert ()
{
AutoIncrementPC2 pc1 = new AutoIncrementPC2 (1);
pc1.setStringField ("pc1");
pc1.setIntField (1);
pc1.getSetField ().add ("string1");
pc1.getSetField ().add ("string2");
AutoIncrementPC2 pc2 = new AutoIncrementPC2 (2);
pc2.setStringField ("pc2");
pc2.setIntField (2);
pc2.getSetField ().add ("string3");
pc2.getSetField ().add ("string4");
AutoIncrementPC3 pc3 = new AutoIncrementPC3 (3);
pc3.setStringField ("pc3");
pc3.getSetField ().add ("string5");
pc3.getSetField ().add ("string6");
AutoIncrementPC3 pc4 = new AutoIncrementPC3 (4);
pc4.setStringField ("pc4");
pc4.getSetField ().add ("string7");
pc4.getSetField ().add ("string8");
EntityManager em = currentEntityManager();
startTx(em);
em.persist(pc1);
em.persist(pc2);
em.persist(pc3);
em.persist(pc4);
oid2 = pc2.getId();
oid4 = pc4.getId();
assertEquals (pc2, em.find(AutoIncrementPC2.class, oid2));
assertEquals (pc4, em.find(AutoIncrementPC3.class, oid4));
endTx(em);
endEm(em);
em = currentEntityManager();
startTx(em);
pc2 = em.find(AutoIncrementPC2.class, 2);
pc4 = em.find(AutoIncrementPC3.class, 4);
assertEquals ("pc2", pc2.getStringField ());
assertEquals (2, pc2.getIntField ());
assertEquals ("pc4", pc4.getStringField ());
endTx(em);
endEm(em);
}
public void testUpdate ()
{
AutoIncrementPC2 pc2 = new AutoIncrementPC2 (1);
pc2.setStringField ("pc2");
pc2.setIntField (2);
AutoIncrementPC3 pc3 = new AutoIncrementPC3 (2);
pc3.setStringField ("pc3");
EntityManager em = currentEntityManager();
startTx(em);
em.persist (pc2);
em.persist (pc3);
endTx(em);
oid2 = pc2.getId();
oid3 = pc3.getId();
endEm(em);
em = currentEntityManager();
startTx(em);
pc2 = em.find(AutoIncrementPC2.class, oid2);
pc3 = em.find(AutoIncrementPC3.class, oid3);
assertEquals ("pc2", pc2.getStringField ());
assertEquals (2, pc2.getIntField ());
assertEquals ("pc3", pc3.getStringField ());
pc2.setStringField ("pc2a");
pc2.setIntField (3);
pc3.setStringField ("pc3a");
endTx(em);
endEm(em);
em = currentEntityManager();
startTx(em);
pc2 = em.find(AutoIncrementPC2.class, oid2);
pc3 = em.find(AutoIncrementPC3.class, oid3);
assertEquals ("pc2a", pc2.getStringField ());
assertEquals (3, pc2.getIntField ());
assertEquals ("pc3a", pc3.getStringField ());
endTx(em);
endEm(em);
}
public void testCircularReferences ()
{
AutoIncrementPC2 pc2a = new AutoIncrementPC2 (1);
pc2a.setStringField ("pc2a");
pc2a.setIntField (1);
AutoIncrementPC2 pc2b = new AutoIncrementPC2 (2);
pc2b.setStringField ("pc2b");
pc2b.setIntField (2);
AutoIncrementPC3 pc3 = new AutoIncrementPC3 (3);
pc3.setStringField ("pc3");
pc2a.setOneOne (pc2b);
pc2b.setOneOne (pc2a);
pc3.setOneOne (pc3);
EntityManager em = currentEntityManager();
startTx(em);
em.persist (pc2a);
em.persist (pc2b);
em.persist (pc3);
endTx(em);
oid2a = pc2a.getId();
oid2b = pc2b.getId();
oid3 = pc3.getId();
endEm(em);
em = currentEntityManager();
startTx(em);
pc2a = em.find(AutoIncrementPC2.class, oid2a);
pc2b = em.find(AutoIncrementPC2.class, oid2b);
pc3 = em.find(AutoIncrementPC3.class, oid3);
assertEquals ("pc2a", pc2a.getStringField ());
assertEquals (1, pc2a.getIntField ());
assertEquals ("pc2b", pc2b.getStringField ());
assertEquals (2, pc2b.getIntField ());
assertEquals ("pc3", pc3.getStringField ());
assertEquals (pc2b, pc2a.getOneOne ());
assertEquals (pc2a, pc2b.getOneOne ());
assertEquals (pc3, pc3.getOneOne ());
endTx(em);
endEm(em);
}
public void testMultipleFlushes ()
{
AutoIncrementPC2 pc2 = new AutoIncrementPC2 (1);
pc2.setStringField ("pc2");
pc2.setIntField (2);
AutoIncrementPC3 pc3 = new AutoIncrementPC3 (2);
pc3.setStringField ("pc3");
EntityManager em = currentEntityManager();
startTx(em);
em.persist (pc2);
em.persist (pc3);
oid2 = pc2.getId();
oid3 = pc3.getId();
em.flush ();
oid2a = pc2.getId();
oid3a = pc3.getId();
assertEquals (oid2, oid2a);
assertEquals (oid3, oid3a);
long id = pc3.getId ();
assertEquals (pc2, em.find(AutoIncrementPC2.class, oid2a));
assertEquals (pc3, em.find(AutoIncrementPC3.class, oid3a));
pc2.setStringField ("pc2a");
pc2.setIntField (3);
pc3.setStringField ("pc3a");
em.flush ();
oid2b = pc2.getId();
oid3b = pc3.getId();
assertEquals (oid2, oid2b);
assertEquals (oid3, oid3b);
assertEquals (id, pc3.getId ());
assertEquals (pc2, em.find(AutoIncrementPC2.class, oid2b));
assertEquals (pc3, em.find(AutoIncrementPC3.class, oid3b));
endTx(em);
endEm(em);
em = currentEntityManager();
startTx(em);
pc2 = em.find(AutoIncrementPC2.class, oid2b);
pc3 = em.find(AutoIncrementPC3.class, oid3b);
assertEquals ("pc2a", pc2.getStringField ());
assertEquals (3, pc2.getIntField ());
assertEquals ("pc3a", pc3.getStringField ());
assertEquals (id, pc3.getId ());
endTx(em);
endEm(em);
}
}