/*
* 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.jpql.version.type;
import java.sql.Timestamp;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.apache.openjpa.persistence.test.SingleEMFTestCase;
/**
* Verifies that the version field is of the proper java type
* when returned from a query. See OPENJPA-2435.
*/
public class TestVersionFieldType extends SingleEMFTestCase {
public void setUp() {
setUp(CLEAR_TABLES, LongVersionEntity.class,
ShortVersionEntity.class, PrimativeLongVersionEntity.class,
PrimativeShortVersionEntity.class, TimestampVersionEntity.class,
BaseEntity.class, ChildVersionEntity.class);
createTestData();
}
public void testProjectionVersionReturnType() {
verifyType(LongVersionEntity.class, Long.class);
verifyType(ShortVersionEntity.class, Short.class);
verifyType(PrimativeShortVersionEntity.class, Short.class);
verifyType(PrimativeLongVersionEntity.class, Long.class);
verifyType(ChildVersionEntity.class, Long.class);
verifyType(TimestampVersionEntity.class, Timestamp.class);
}
public void verifyType(Class<?> cls, Class<?> expectedClsType) {
EntityManager em = emf.createEntityManager();
String str = "SELECT o.id, o.version FROM " + cls.getName() + " o";
Query query = em.createQuery(str);
List<Object[]> objectList = query.getResultList();
for (Object[] objects : objectList) {
assertNotNull("Version should not be null.", objects[1]);
assertTrue("Type should be " + expectedClsType.getName() +
". But it is " + objects[1].getClass(),
objects[1].getClass() == expectedClsType);
}
em.close();
}
public void createTestData() {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
LongVersionEntity lve = new LongVersionEntity();
lve.setId(9);
em.persist(lve);
ShortVersionEntity sve = new ShortVersionEntity();
sve.setId(9);
em.persist(sve);
PrimativeShortVersionEntity psve = new PrimativeShortVersionEntity();
psve.setId(9);
em.persist(psve);
PrimativeLongVersionEntity plve = new PrimativeLongVersionEntity();
plve.setId(9);
em.persist(plve);
TimestampVersionEntity tve = new TimestampVersionEntity();
tve.setId(9);
em.persist(tve);
ChildVersionEntity ave = new ChildVersionEntity();
ave.setId(9);
em.persist(ave);
em.getTransaction().commit();
em.close();
}
}