/* * Copyright 2004-2015 the Seasar Foundation and the Others. * * Licensed 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.seasar.extension.jdbc.it.auto; import javax.persistence.EntityExistsException; import junitx.framework.ArrayAssert; import org.junit.runner.RunWith; import org.seasar.extension.jdbc.JdbcManager; import org.seasar.extension.jdbc.exception.IdGenerationFailedRuntimeException; import org.seasar.extension.jdbc.exception.IdGeneratorNotFoundRuntimeException; import org.seasar.extension.jdbc.exception.IdPropertyNotAssignedRuntimeException; import org.seasar.extension.jdbc.exception.IdentityGeneratorNotSupportedRuntimeException; import org.seasar.extension.jdbc.exception.SequenceGeneratorNotSupportedRuntimeException; import org.seasar.extension.jdbc.it.entity.Authority; import org.seasar.extension.jdbc.it.entity.AuthorityType; import org.seasar.extension.jdbc.it.entity.AutoStrategy; import org.seasar.extension.jdbc.it.entity.CompKeyDepartment; import org.seasar.extension.jdbc.it.entity.ConcreteDepartment; import org.seasar.extension.jdbc.it.entity.Department; import org.seasar.extension.jdbc.it.entity.Department2; import org.seasar.extension.jdbc.it.entity.Department3; import org.seasar.extension.jdbc.it.entity.Department4; import org.seasar.extension.jdbc.it.entity.Department5; import org.seasar.extension.jdbc.it.entity.IdentityStrategy; import org.seasar.extension.jdbc.it.entity.Job; import org.seasar.extension.jdbc.it.entity.JobType; import org.seasar.extension.jdbc.it.entity.LargeObject; import org.seasar.extension.jdbc.it.entity.NoId; import org.seasar.extension.jdbc.it.entity.SequenceStrategy; import org.seasar.extension.jdbc.it.entity.SequenceStrategy2; import org.seasar.extension.jdbc.it.entity.SequenceStrategy3; import org.seasar.extension.jdbc.it.entity.TableStrategy; import org.seasar.extension.jdbc.it.entity.TableStrategy2; import org.seasar.extension.jdbc.it.entity.TableStrategy3; import org.seasar.extension.jdbc.it.entity.TableStrategy4; import org.seasar.extension.jdbc.it.entity.TableStrategy5; import org.seasar.extension.jdbc.manager.JdbcManagerImplementor; import org.seasar.extension.jdbc.where.SimpleWhere; import org.seasar.framework.unit.Seasar2; import org.seasar.framework.unit.annotation.Prerequisite; import static org.junit.Assert.*; /** * @author taedium * */ @RunWith(Seasar2.class) public class AutoInsertTest { private JdbcManager jdbcManager; private JdbcManagerImplementor jdbcManagerImplementor; /** * * @throws Exception */ public void testExecute() throws Exception { Department department = new Department(); department.departmentId = 99; department.departmentName = "hoge"; int result = jdbcManager.insert(department).execute(); assertEquals(1, result); assertEquals(1, department.version); department = jdbcManager.from(Department.class).where( new SimpleWhere().eq("departmentId", 99)).getSingleResult(); assertEquals(99, department.departmentId); assertEquals(0, department.departmentNo); assertEquals("hoge", department.departmentName); assertNull(department.location); assertEquals(1, department.version); } /** * * @throws Exception */ public void testExecute_excludesNull() throws Exception { Department department = new Department(); department.departmentId = 99; department.departmentName = "hoge"; int result = jdbcManager.insert(department).excludesNull().execute(); assertEquals(1, result); assertEquals(1, department.version); department = jdbcManager.from(Department.class).where( new SimpleWhere().eq("departmentId", 99)).getSingleResult(); assertEquals(99, department.departmentId); assertEquals(0, department.departmentNo); assertEquals("hoge", department.departmentName); assertEquals("TOKYO", department.location); assertEquals(1, department.version); } /** * * @throws Exception */ public void testExecute_includes() throws Exception { Department department = new Department(); department.departmentId = 99; department.departmentNo = 99; department.departmentName = "hoge"; department.location = "foo"; department.version = 1; int result = jdbcManager.insert(department).includes( "departmentId", "departmentNo", "location", "version").execute(); assertEquals(1, result); assertEquals(1, department.version); department = jdbcManager.from(Department.class).where( new SimpleWhere().eq("departmentId", 99)).getSingleResult(); assertEquals(99, department.departmentId); assertEquals(99, department.departmentNo); assertNull(department.departmentName); assertEquals("foo", department.location); assertEquals(1, department.version); } /** * * @throws Exception */ public void testExecute_excludes() throws Exception { Department department = new Department(); department.departmentId = 99; department.departmentNo = 99; department.departmentName = "hoge"; department.location = "foo"; department.version = 1; int result = jdbcManager.insert(department).excludes( "departmentName", "location").execute(); assertEquals(1, result); assertEquals(1, department.version); department = jdbcManager.from(Department.class).where( new SimpleWhere().eq("departmentId", 99)).getSingleResult(); assertEquals(99, department.departmentId); assertEquals(99, department.departmentNo); assertNull(department.departmentName); assertEquals("TOKYO", department.location); assertEquals(1, department.version); } /** * * @throws Exception */ public void testExecute_compKey() throws Exception { CompKeyDepartment department = new CompKeyDepartment(); department.departmentId1 = 99; department.departmentId2 = 99; department.departmentName = "hoge"; int result = jdbcManager.insert(department).execute(); assertEquals(1, result); assertEquals(1, department.version); department = jdbcManager.from(CompKeyDepartment.class).where( new SimpleWhere().eq("departmentId1", 99).eq( "departmentId2", 99)).getSingleResult(); assertEquals(99, department.departmentId1); assertEquals(99, department.departmentId2); assertEquals(0, department.departmentNo); assertEquals("hoge", department.departmentName); assertNull(department.location); assertEquals(1, department.version); } /** * * @throws Exception */ public void testExecute_mappedSuperclass() throws Exception { ConcreteDepartment department = new ConcreteDepartment(); department.departmentId = 99; department.departmentName = "hoge"; int result = jdbcManager.insert(department).execute(); assertEquals(1, result); assertEquals(1, department.version); department = jdbcManager.from(ConcreteDepartment.class).where( new SimpleWhere().eq("departmentId", 99)).getSingleResult(); assertEquals(99, department.departmentId); assertEquals(0, department.departmentNo); assertEquals("hoge", department.departmentName); assertNull(department.location); assertEquals(1, department.version); } /** * * @throws Exception */ public void testId_IdPropertyNotAssignedRuntimeException() throws Exception { try { jdbcManager.insert(new Department5()).execute(); fail(); } catch (IdPropertyNotAssignedRuntimeException e) { } } /** * * @throws Exception */ public void testId_auto() throws Exception { for (int i = 0; i < 110; i++) { AutoStrategy entity = new AutoStrategy(); jdbcManager.insert(entity).execute(); assertNotNull(entity.id); } } /** * * @throws Exception */ public void testId_identity() throws Exception { try { for (int i = 0; i < 110; i++) { IdentityStrategy entity = new IdentityStrategy(); jdbcManager.insert(entity).execute(); if (!jdbcManagerImplementor.getDialect().supportsIdentity()) { fail(); } assertNotNull(entity.id); } } catch (IdentityGeneratorNotSupportedRuntimeException e) { if (jdbcManagerImplementor.getDialect().supportsIdentity()) { fail(); } } } /** * * @throws Exception */ public void testId_sequence() throws Exception { try { for (int i = 0; i < 110; i++) { SequenceStrategy entity = new SequenceStrategy(); jdbcManager.insert(entity).execute(); if (!jdbcManagerImplementor.getDialect().supportsSequence()) { fail(); } assertNotNull(entity.id); } } catch (SequenceGeneratorNotSupportedRuntimeException e) { if (jdbcManagerImplementor.getDialect().supportsSequence()) { fail(); } } } /** * * @throws Exception */ public void testId_sequence_explicitGenerator() throws Exception { try { for (int i = 0; i < 110; i++) { SequenceStrategy2 entity = new SequenceStrategy2(); jdbcManager.insert(entity).execute(); if (!jdbcManagerImplementor.getDialect().supportsSequence()) { fail(); } assertNotNull(entity.id); } } catch (SequenceGeneratorNotSupportedRuntimeException e) { if (jdbcManagerImplementor.getDialect().supportsSequence()) { fail(); } } } /** * * @throws Exception */ public void testId_sequence_IdGeneratorNotFoundRuntimeException() throws Exception { try { jdbcManager.insert(new SequenceStrategy3()).execute(); fail(); } catch (IdGeneratorNotFoundRuntimeException e) { } } /** * * @throws Exception */ public void testId_table() throws Exception { for (int i = 0; i < 110; i++) { TableStrategy entity = new TableStrategy(); jdbcManager.insert(entity).execute(); assertNotNull(entity.id); } } /** * * @throws Exception */ public void testId_table_explicitGenerator() throws Exception { for (int i = 0; i < 110; i++) { TableStrategy2 entity = new TableStrategy2(); jdbcManager.insert(entity).execute(); assertNotNull(entity.id); } } /** * * @throws Exception */ @Prerequisite("#ENV not in {'hsqldb', 'h2', 'standard', 'oracle', 'db2', 'mysql', 'postgre'}") public void testId_table_qualifiedGenerator() throws Exception { for (int i = 0; i < 110; i++) { TableStrategy5 entity = new TableStrategy5(); jdbcManager.insert(entity).execute(); assertNotNull(entity.id); } } /** * * @throws Exception */ public void testId_table_IdGenerationFailedRuntimeException() throws Exception { try { jdbcManager.insert(new TableStrategy3()).execute(); fail(); } catch (IdGenerationFailedRuntimeException e) { } } /** * * @throws Exception */ public void testId_table_IdGeneratorNotFoundRuntimeException() throws Exception { try { jdbcManager.insert(new TableStrategy4()).execute(); fail(); } catch (IdGeneratorNotFoundRuntimeException e) { } } /** * * @throws Exception */ public void testColumnAnnotation() throws Exception { Department2 department = new Department2(); department.departmentId = 99; department.departmentNo = 99; department.departmentName = "hoge"; int result = jdbcManager.insert(department).execute(); assertEquals(1, result); String departmentName = jdbcManager .selectBySql( String.class, "select DEPARTMENT_NAME from DEPARTMENT where DEPARTMENT_ID = ?", 99) .getSingleResult(); assertNull(departmentName); } /** * * @throws Exception */ public void testTransientAnnotation() throws Exception { Department3 department = new Department3(); department.departmentId = 99; department.departmentNo = 99; department.departmentName = "hoge"; int result = jdbcManager.insert(department).execute(); assertEquals(1, result); String departmentName = jdbcManager .selectBySql( String.class, "select DEPARTMENT_NAME from DEPARTMENT where DEPARTMENT_ID = ?", 99) .getSingleResult(); assertNull(departmentName); } /** * * @throws Exception */ public void testTransientModifier() throws Exception { Department4 department = new Department4(); department.departmentId = 99; department.departmentNo = 99; department.departmentName = "hoge"; int result = jdbcManager.insert(department).execute(); assertEquals(1, result); String departmentName = jdbcManager .selectBySql( String.class, "select DEPARTMENT_NAME from DEPARTMENT where DEPARTMENT_ID = ?", 99) .getSingleResult(); assertNull(departmentName); } /** * * @throws Exception */ public void testLargeObject() throws Exception { byte[] bytes = new byte[10000]; for (int i = 0; i < bytes.length; i++) { bytes[i] = (byte) 'b'; } char[] chars = new char[100]; for (int i = 0; i < chars.length; i++) { chars[i] = 'あ'; } LargeObject.MyDto dto = new LargeObject.MyDto("bar"); LargeObject lob = new LargeObject(); lob.id = 1; lob.name = "あいうえお"; lob.largeName = new String(chars); lob.bytes = new byte[] { 'f', 'o', 'o' }; lob.largeBytes = bytes; lob.dto = dto; lob.largeDto = dto; jdbcManager.insert(lob).execute(); lob = jdbcManager.from(LargeObject.class).id(1).getSingleResult(); assertEquals("あいうえお", lob.name); assertEquals(new String(chars), lob.largeName); ArrayAssert.assertEquals(new byte[] { 'f', 'o', 'o' }, lob.bytes); ArrayAssert.assertEquals(bytes, lob.largeBytes); assertEquals(dto, lob.dto); assertEquals(dto, lob.largeDto); } /** * * @throws Exception */ public void testEntityExistsException() throws Exception { Department department = new Department(); department.departmentId = 1; department.departmentNo = 50; department.departmentName = "hoge"; try { jdbcManager.insert(department).execute(); fail(); } catch (EntityExistsException e) { } } /** * * @throws Exception */ public void testEnumType() throws Exception { Job job = new Job(); job.id = 10; job.jobType = JobType.CLERK; jdbcManager.insert(job).execute(); job = jdbcManager.from(Job.class).id(10).getSingleResult(); assertEquals(JobType.CLERK, job.jobType); } /** * * @throws Exception */ public void testUserDefineValueType() throws Exception { Authority authority = new Authority(); authority.id = 10; authority.authorityType = AuthorityType.valueOf(100); jdbcManager.insert(authority).execute(); jdbcManager.from(Authority.class).id(10).getSingleResult(); assertEquals(100, authority.authorityType.value()); } /** * * @throws Exception */ public void testNoId() throws Exception { NoId noId = new NoId(); noId.value1 = 1; noId.value2 = 1; jdbcManager.insert(noId).execute(); assertEquals(3L, jdbcManager.from(NoId.class).getCount()); } }