blob: da5d5e0b50f607844f390a6fd6221ada765198f4 [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.detachment;
import org.apache.openjpa.enhance.PersistenceCapable;
import org.apache.openjpa.persistence.OpenJPAEntityManagerSPI;
import org.apache.openjpa.persistence.detachment.model.NoDetachedStateEntityFieldAccess;
import org.apache.openjpa.persistence.detachment.model.NoDetachedStateEntityPropertyAccess;
import org.apache.openjpa.persistence.test.SingleEMFTestCase;
public class TestDetachNoStateField extends SingleEMFTestCase {
@Override
protected void setUp(Object... props) {
super.setUp(DROP_TABLES, "openjpa.DetachState", "loaded(DetachedStateField=false)",
NoDetachedStateEntityPropertyAccess.class, NoDetachedStateEntityFieldAccess.class);
loadDB();
}
/**
* This testcase was added for OPENJPA-1400.
*/
public void testIsDetchedNoStateManagerZeroVersionField() {
OpenJPAEntityManagerSPI em = emf.createEntityManager();
NoDetachedStateEntityPropertyAccess property = em.find(NoDetachedStateEntityPropertyAccess.class, 1);
NoDetachedStateEntityFieldAccess field = em.find(NoDetachedStateEntityFieldAccess.class, 1);
em.close();
PersistenceCapable pcProperty = (PersistenceCapable) property;
PersistenceCapable pcField = (PersistenceCapable) field;
assertTrue(pcProperty.pcIsDetached());
assertTrue(pcField.pcIsDetached());
}
/**
* This testcase was added for OPENJPA-1400.
*/
public void testPersistRelationshipToDetchedEntityZeroVersion() {
OpenJPAEntityManagerSPI em = emf.createEntityManager();
NoDetachedStateEntityPropertyAccess property = em.find(NoDetachedStateEntityPropertyAccess.class, 1);
em.close();
// Make sure we don't hit any exceptions when persisting a relationship to a detached
// entity.
em = emf.createEntityManager();
em.getTransaction().begin();
NoDetachedStateEntityFieldAccess field = em.find(NoDetachedStateEntityFieldAccess.class, 1);
field.setRelationship(property);
em.getTransaction().commit();
em.close();
// Make sure that the relationship was persisted
em = emf.createEntityManager();
field = em.find(NoDetachedStateEntityFieldAccess.class, 1);
property = field.getRelationship();
assertNotNull(property);
assertEquals(1, property.getId());
}
/**
* This testcase was added for OPENJPA-1482.
*/
public void testSetVersionPropertyAccess() {
NoDetachedStateEntityPropertyAccess entity = new NoDetachedStateEntityPropertyAccess();
entity.setVersion(1);
}
void loadDB() {
OpenJPAEntityManagerSPI em = emf.createEntityManager();
em.getTransaction().begin();
em.createNativeQuery("INSERT INTO PropertyAccessNoDetachedState (ID,VERSION) VALUES (1,0)")
.executeUpdate();
em.createNativeQuery("INSERT INTO FieldAccessNoDetachedState (ID,VERSION) VALUES (1,0)")
.executeUpdate();
em.getTransaction().commit();
em.close();
}
}