/* * 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.meta; import java.io.Serializable; import java.lang.reflect.Field; import java.sql.Timestamp; import java.util.Date; import java.util.List; import javax.persistence.Basic; import javax.persistence.Entity; import javax.persistence.Enumerated; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinColumns; import javax.persistence.Lob; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.SequenceGenerator; import javax.persistence.TableGenerator; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; import javax.persistence.Version; import junit.framework.TestCase; import org.seasar.extension.jdbc.EntityMeta; import org.seasar.extension.jdbc.JoinColumnMeta; import org.seasar.extension.jdbc.PropertyMeta; import org.seasar.extension.jdbc.RelationshipType; import org.seasar.extension.jdbc.TableMeta; import org.seasar.extension.jdbc.dialect.Db2Dialect; import org.seasar.extension.jdbc.dialect.OracleDialect; import org.seasar.extension.jdbc.dialect.StandardDialect; import org.seasar.extension.jdbc.entity.Aaa; import org.seasar.extension.jdbc.entity.Bbb; import org.seasar.extension.jdbc.exception.BothMappedByAndJoinColumnRuntimeException; import org.seasar.extension.jdbc.exception.IdentityGeneratorNotSupportedRuntimeException; import org.seasar.extension.jdbc.exception.JoinColumnNameAndReferencedColumnNameMandatoryRuntimeException; import org.seasar.extension.jdbc.exception.LazyFetchSpecifiedRuntimeException; import org.seasar.extension.jdbc.exception.MappedByMandatoryRuntimeException; import org.seasar.extension.jdbc.exception.OneToManyNotGenericsRuntimeException; import org.seasar.extension.jdbc.exception.OneToManyNotListRuntimeException; import org.seasar.extension.jdbc.exception.RelationshipNotEntityRuntimeException; import org.seasar.extension.jdbc.exception.SequenceGeneratorNotSupportedRuntimeException; import org.seasar.extension.jdbc.exception.UnsupportedPropertyTypeRuntimeException; import org.seasar.extension.jdbc.exception.VersionPropertyNotNumberRuntimeException; import org.seasar.extension.jdbc.id.IdentityIdGenerator; import org.seasar.extension.jdbc.id.SequenceIdGenerator; import org.seasar.extension.jdbc.id.TableIdGenerator; import org.seasar.extension.jdbc.types.Authority; import org.seasar.extension.jdbc.types.EnumOrdinalType; import org.seasar.extension.jdbc.types.EnumType; import org.seasar.extension.jdbc.types.UserDefineType; import org.seasar.extension.jdbc.types.ValueTypes; import org.seasar.framework.convention.impl.PersistenceConventionImpl; /** * @author higa * */ public class PropertyMetaFactoryImplTest extends TestCase { @Transient private PropertyMetaFactoryImpl factory; @SuppressWarnings("unused") private transient String hoge; @SuppressWarnings("unused") @Basic private String eager; @SuppressWarnings("unused") @Basic(fetch = FetchType.LAZY) private String lazy; @SuppressWarnings("unused") @Id @Basic(fetch = FetchType.LAZY) private String idLazy; @SuppressWarnings("unused") @Temporal(TemporalType.DATE) private Date date; @SuppressWarnings("unused") private Date illegalDate; @SuppressWarnings("unused") @Temporal(TemporalType.TIME) private Date calendar; @SuppressWarnings("unused") private Date illegalCalendar; @SuppressWarnings("unused") @Version private Integer version; @SuppressWarnings("unused") @Version private Timestamp illegalVersion; @SuppressWarnings("unused") @OneToOne @JoinColumn(name = "bbb_id", referencedColumnName = "id") private Bbb bbb; @SuppressWarnings("unused") @OneToOne @JoinColumns( { @JoinColumn, @JoinColumn }) private Bbb bbb2; private EntityMeta entityMeta; @Override protected void setUp() { entityMeta = new EntityMeta("Aaa"); entityMeta.setEntityClass(Aaa.class); TableMeta tableMeta = new TableMeta(); tableMeta.setName("AAA"); entityMeta.setTableMeta(tableMeta); factory = new PropertyMetaFactoryImpl(); PersistenceConventionImpl convention = new PersistenceConventionImpl(); factory.setPersistenceConvention(convention); ColumnMetaFactoryImpl cmFactory = new ColumnMetaFactoryImpl(); cmFactory.setPersistenceConvention(convention); factory.setColumnMetaFactory(cmFactory); } /** * @throws Exception */ public void testId() throws Exception { Field field = Aaa.class.getDeclaredField("id"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertTrue(propertyMeta.isId()); } /** * @throws Exception */ public void testIdAutoGeneratedValue() throws Exception { Field field = AutoGeneratedId.class.getDeclaredField("id"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertTrue(propertyMeta.isId()); assertTrue(propertyMeta.hasIdGenerator()); assertEquals(GenerationType.AUTO, propertyMeta.getGenerationType()); assertTrue(propertyMeta.getIdGenerator(entityMeta, new Db2Dialect()) instanceof IdentityIdGenerator); assertTrue(propertyMeta.getIdGenerator(entityMeta, new OracleDialect()) instanceof SequenceIdGenerator); assertTrue(propertyMeta.getIdGenerator(entityMeta, new StandardDialect()) instanceof TableIdGenerator); } /** * @throws Exception */ public void testIdIdentityGeneratedValue() throws Exception { Field field = IdentityGeneratedId.class.getDeclaredField("id"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertTrue(propertyMeta.isId()); assertTrue(propertyMeta.hasIdGenerator()); assertEquals(GenerationType.IDENTITY, propertyMeta.getGenerationType()); try { propertyMeta.getIdGenerator(entityMeta, new StandardDialect()); fail(); } catch (IdentityGeneratorNotSupportedRuntimeException expected) { } } /** * @throws Exception */ public void testSequenceIdentityGeneratedValue() throws Exception { Field field = SequenceGeneratedId.class.getDeclaredField("id"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertTrue(propertyMeta.isId()); assertTrue(propertyMeta.hasIdGenerator()); assertEquals(GenerationType.SEQUENCE, propertyMeta.getGenerationType()); try { propertyMeta.getIdGenerator(entityMeta, new StandardDialect()); fail(); } catch (SequenceGeneratorNotSupportedRuntimeException expected) { } } /** * @throws Exception */ public void testSequenceIdentityGeneratedValue_classAnnotated() throws Exception { EntityMeta entityMeta = new EntityMeta("SequenceGeneratedId"); entityMeta.setEntityClass(SequenceGeneratedId.class); TableMeta tableMeta = new TableMeta(); tableMeta.setName("SEQUENCE_GENERATED_ID"); entityMeta.setTableMeta(tableMeta); Field field = SequenceGeneratedId.class.getDeclaredField("id2"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertTrue(propertyMeta.isId()); assertTrue(propertyMeta.hasIdGenerator()); assertEquals(GenerationType.SEQUENCE, propertyMeta.getGenerationType()); } /** * @throws Exception */ public void testTableIdentityGeneratedValue() throws Exception { Field field = TableGeneratedId.class.getDeclaredField("id"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertTrue(propertyMeta.isId()); assertTrue(propertyMeta.hasIdGenerator()); assertEquals(GenerationType.TABLE, propertyMeta.getGenerationType()); assertTrue(propertyMeta.getIdGenerator(entityMeta, new StandardDialect()) instanceof TableIdGenerator); } /** * @throws Exception */ public void testTableIdentityGeneratedValue_classAnnotated() throws Exception { EntityMeta entityMeta = new EntityMeta("TableGeneratedId"); entityMeta.setEntityClass(TableGeneratedId.class); TableMeta tableMeta = new TableMeta(); tableMeta.setName("TABLE_GENERATED_ID"); entityMeta.setTableMeta(tableMeta); Field field = TableGeneratedId.class.getDeclaredField("id2"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertTrue(propertyMeta.isId()); assertTrue(propertyMeta.hasIdGenerator()); assertEquals(GenerationType.TABLE, propertyMeta.getGenerationType()); assertTrue(propertyMeta.getIdGenerator(entityMeta, new StandardDialect()) instanceof TableIdGenerator); } /** * @throws Exception */ public void testId_noid() throws Exception { Field field = Aaa.class.getDeclaredField("name"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertFalse(propertyMeta.isId()); } /** * @throws Exception */ public void testTransient() throws Exception { Field field = getClass().getDeclaredField("factory"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertTrue(propertyMeta.isTransient()); } /** * @throws Exception */ public void testTransient_modifier() throws Exception { Field field = getClass().getDeclaredField("hoge"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertTrue(propertyMeta.isTransient()); } /** * @throws Exception */ public void testTransient_notransient() throws Exception { Field field = Aaa.class.getDeclaredField("name"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertFalse(propertyMeta.isTransient()); } /** * @throws Exception */ public void testTransient_dto() throws Exception { Field field = MyAaa.class.getDeclaredField("myDto"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertTrue(propertyMeta.isTransient()); } /** * @throws Exception */ public void testColumnMeta() throws Exception { Field field = Aaa.class.getDeclaredField("id"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertNotNull(propertyMeta.getColumnMeta()); } /** * @throws Exception */ public void testColumnMeta_transient() throws Exception { Field field = MyAaa.class.getDeclaredField("ignore"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertNull(propertyMeta.getColumnMeta()); assertNull(propertyMeta.getValueType()); } /** * @throws Exception */ public void testField() throws Exception { Field field = Aaa.class.getDeclaredField("id"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertSame(field, propertyMeta.getField()); assertSame(ValueTypes.INTEGER, propertyMeta.getValueType()); } /** * @throws Exception */ public void testName() throws Exception { Field field = Aaa.class.getDeclaredField("id"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertEquals("id", propertyMeta.getName()); assertSame(ValueTypes.INTEGER, propertyMeta.getValueType()); } /** * @throws Exception */ public void testPropertyClass() throws Exception { Field field = Aaa.class.getDeclaredField("id"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertEquals(Integer.class, propertyMeta.getPropertyClass()); assertSame(ValueTypes.INTEGER, propertyMeta.getValueType()); } /** * * @throws Exception */ public void testFetchType() throws Exception { Field field = getClass().getDeclaredField("eager"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertEquals(FetchType.EAGER, propertyMeta.getFetchType()); assertTrue(propertyMeta.isEager()); assertFalse(propertyMeta.isLazy()); field = getClass().getDeclaredField("lazy"); propertyMeta = factory.createPropertyMeta(field, entityMeta); assertEquals(FetchType.LAZY, propertyMeta.getFetchType()); assertFalse(propertyMeta.isEager()); assertTrue(propertyMeta.isLazy()); try { field = getClass().getDeclaredField("idLazy"); propertyMeta = factory.createPropertyMeta(field, entityMeta); fail(); } catch (LazyFetchSpecifiedRuntimeException expected) { assertEquals("Aaa", expected.getEntityName()); assertEquals("idLazy", expected.getPropertyName()); } } /** * * @throws Exception */ public void testTemporalDate() throws Exception { Field field = getClass().getDeclaredField("date"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertEquals(TemporalType.DATE, propertyMeta.getTemporalType()); assertSame(ValueTypes.DATE_SQLDATE, propertyMeta.getValueType()); } /** * * @throws Exception */ public void testTemporalDate_noannotation() throws Exception { Field field = getClass().getDeclaredField("illegalDate"); try { factory.createPropertyMeta(field, entityMeta); fail(); } catch (Exception e) { } } /** * * @throws Exception */ public void testTemporalCalendar() throws Exception { Field field = getClass().getDeclaredField("calendar"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertEquals(TemporalType.TIME, propertyMeta.getTemporalType()); assertSame(ValueTypes.DATE_TIME, propertyMeta.getValueType()); } /** * * @throws Exception */ public void testTemporalCalendar_noannotation() throws Exception { Field field = getClass().getDeclaredField("illegalCalendar"); try { factory.createPropertyMeta(field, entityMeta); fail(); } catch (Exception e) { } } /** * @throws Exception */ public void testVersion() throws Exception { Field field = getClass().getDeclaredField("version"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertTrue(propertyMeta.isVersion()); assertSame(ValueTypes.INTEGER, propertyMeta.getValueType()); } /** * @throws Exception */ public void testVersion_noannotation() throws Exception { Field field = Aaa.class.getDeclaredField("id"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertFalse(propertyMeta.isVersion()); } /** * @throws Exception */ public void testVersion_notNumber() throws Exception { Field field = getClass().getDeclaredField("illegalVersion"); try { factory.createPropertyMeta(field, entityMeta); fail(); } catch (VersionPropertyNotNumberRuntimeException expected) { System.out.println(expected); } } /** * @throws Exception */ public void testLob() throws Exception { Field field = MyAaa.class.getDeclaredField("largeName"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertTrue(propertyMeta.isLob()); assertSame(ValueTypes.CLOB, propertyMeta.getValueType()); } /** * @throws Exception */ public void testUserDefinedType() throws Exception { Field field = MyAaa.class.getDeclaredField("authority"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertEquals(UserDefineType.class, propertyMeta.getValueType() .getClass()); field = MyAaa.class.getDeclaredField("myInt"); propertyMeta = factory.createPropertyMeta(field, entityMeta); assertEquals(UserDefineType.class, propertyMeta.getValueType() .getClass()); } /** * @throws Exception */ public void testJoinColumnMeta() throws Exception { Field field = getClass().getDeclaredField("bbb"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertEquals(1, propertyMeta.getJoinColumnMetaList().size()); JoinColumnMeta joinColumnMeta = propertyMeta.getJoinColumnMetaList() .get(0); assertEquals("bbb_id", joinColumnMeta.getName()); assertEquals("id", joinColumnMeta.getReferencedColumnName()); } /** * @throws Exception */ public void testJoinColumnsMeta() throws Exception { Field field = getClass().getDeclaredField("bbb"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertEquals(1, propertyMeta.getJoinColumnMetaList().size()); JoinColumnMeta joinColumnMeta = propertyMeta.getJoinColumnMetaList() .get(0); assertEquals("bbb_id", joinColumnMeta.getName()); assertEquals("id", joinColumnMeta.getReferencedColumnName()); } /** * @throws Exception */ public void testJoinColumnsMeta_empty() throws Exception { entityMeta.setEntityClass(getClass()); entityMeta.setName("MyTest"); Field field = getClass().getDeclaredField("bbb2"); try { factory.createPropertyMeta(field, entityMeta); fail(); } catch (JoinColumnNameAndReferencedColumnNameMandatoryRuntimeException e) { System.out.println(e); assertEquals("MyTest", e.getEntityName()); assertEquals("bbb2", e.getPropertyName()); } } /** * @throws Exception * */ public void testJoinColumnMeta_noentity() throws Exception { Field field = Aaa.class.getDeclaredField("id"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertEquals(0, propertyMeta.getJoinColumnMetaList().size()); } /** * @throws Exception */ public void testSerializable() throws Exception { entityMeta.setName("MyAaa"); entityMeta.setEntityClass(MyAaa.class); Field field = MyAaa.class.getDeclaredField("mySerializable"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertSame(ValueTypes.SERIALIZABLE_BYTE_ARRAY, propertyMeta .getValueType()); } /** * @throws Exception */ public void testEnum() throws Exception { entityMeta.setName("MyEnum"); entityMeta.setEntityClass(MyEnum.class); Field field = MyEnum.class.getDeclaredField("type"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertEquals(EnumOrdinalType.class, propertyMeta.getValueType() .getClass()); field = MyEnum.class.getDeclaredField("ordinalType"); propertyMeta = factory.createPropertyMeta(field, entityMeta); assertEquals(EnumOrdinalType.class, propertyMeta.getValueType() .getClass()); field = MyEnum.class.getDeclaredField("stringType"); propertyMeta = factory.createPropertyMeta(field, entityMeta); assertEquals(EnumType.class, propertyMeta.getValueType().getClass()); } /** * @throws Exception */ public void testOneToOne() throws Exception { Field field = MyAaa.class.getDeclaredField("bbb"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertEquals(RelationshipType.ONE_TO_ONE, propertyMeta .getRelationshipType()); assertEquals(MyBbb.class, propertyMeta.getRelationshipClass()); assertEquals(1, propertyMeta.getJoinColumnMetaList().size()); assertNull(propertyMeta.getColumnMeta()); } /** * @throws Exception */ public void testOneToOneInverse() throws Exception { entityMeta.setName("MyBbb"); entityMeta.setEntityClass(MyBbb.class); Field field = MyBbb.class.getDeclaredField("aaa"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertEquals(RelationshipType.ONE_TO_ONE, propertyMeta .getRelationshipType()); assertEquals(MyAaa.class, propertyMeta.getRelationshipClass()); assertEquals("bbb", propertyMeta.getMappedBy()); assertNull(propertyMeta.getColumnMeta()); } /** * @throws Exception */ public void testOneToOne_notEntity() throws Exception { entityMeta.setEntityClass(BadAaa2.class); entityMeta.setName("BadAaa2"); Field field = BadAaa2.class.getDeclaredField("myDto"); try { factory.createPropertyMeta(field, entityMeta); fail(); } catch (RelationshipNotEntityRuntimeException e) { System.out.println(e); assertEquals("BadAaa2", e.getEntityName()); assertEquals("myDto", e.getPropertyName()); assertEquals(MyDto.class, e.getRelationshipClass()); } } /** * @throws Exception */ public void testOneToOne_bothMappedByAndJoinColumn() throws Exception { entityMeta.setEntityClass(BadAaa2.class); entityMeta.setName("BadAaa2"); Field field = BadAaa2.class.getDeclaredField("aaa6"); try { factory.createPropertyMeta(field, entityMeta); fail(); } catch (BothMappedByAndJoinColumnRuntimeException e) { System.out.println(e); assertEquals("BadAaa2", e.getEntityName()); assertEquals("aaa6", e.getPropertyName()); } } /** * @throws Exception */ public void testOneToMany() throws Exception { entityMeta.setName("MyBbb"); entityMeta.setEntityClass(MyBbb.class); Field field = MyBbb.class.getDeclaredField("ddds"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertEquals(RelationshipType.ONE_TO_MANY, propertyMeta .getRelationshipType()); assertEquals(MyDdd.class, propertyMeta.getRelationshipClass()); assertEquals("bbb", propertyMeta.getMappedBy()); assertNull(propertyMeta.getColumnMeta()); } /** * @throws Exception */ public void testOneToMany_notList() throws Exception { entityMeta.setEntityClass(BadAaa2.class); entityMeta.setName("BadAaa2"); Field field = BadAaa2.class.getDeclaredField("aaa2"); try { factory.createPropertyMeta(field, entityMeta); fail(); } catch (OneToManyNotListRuntimeException e) { System.out.println(e); assertEquals("BadAaa2", e.getEntityName()); assertEquals("aaa2", e.getPropertyName()); } } /** * @throws Exception */ public void testOneToMany_notGenerics() throws Exception { entityMeta.setEntityClass(BadAaa2.class); entityMeta.setName("BadAaa2"); Field field = BadAaa2.class.getDeclaredField("aaa3"); try { factory.createPropertyMeta(field, entityMeta); fail(); } catch (OneToManyNotGenericsRuntimeException e) { System.out.println(e); assertEquals("BadAaa2", e.getEntityName()); assertEquals("aaa3", e.getPropertyName()); } } /** * @throws Exception */ public void testOneToMany_notEntity() throws Exception { entityMeta.setEntityClass(BadAaa2.class); entityMeta.setName("BadAaa2"); Field field = BadAaa2.class.getDeclaredField("myDto3"); try { factory.createPropertyMeta(field, entityMeta); fail(); } catch (RelationshipNotEntityRuntimeException e) { System.out.println(e); assertEquals("BadAaa2", e.getEntityName()); assertEquals("myDto3", e.getPropertyName()); } } /** * @throws Exception */ public void testOneToMany_bothMappedByAndJoinColumn() throws Exception { entityMeta.setEntityClass(BadAaa2.class); entityMeta.setName("BadAaa2"); Field field = BadAaa2.class.getDeclaredField("aaa7"); try { factory.createPropertyMeta(field, entityMeta); fail(); } catch (BothMappedByAndJoinColumnRuntimeException e) { System.out.println(e); assertEquals("BadAaa2", e.getEntityName()); assertEquals("aaa7", e.getPropertyName()); } } /** * @throws Exception */ public void testOneToMany_mappedByMandatory() throws Exception { entityMeta.setEntityClass(BadAaa2.class); entityMeta.setName("BadAaa2"); Field field = BadAaa2.class.getDeclaredField("aaa8"); try { factory.createPropertyMeta(field, entityMeta); fail(); } catch (MappedByMandatoryRuntimeException e) { System.out.println(e); assertEquals("BadAaa2", e.getEntityName()); assertEquals("aaa8", e.getPropertyName()); } } /** * @throws Exception */ public void testManyToOne() throws Exception { entityMeta.setName("MyDdd"); entityMeta.setEntityClass(MyDdd.class); Field field = MyDdd.class.getDeclaredField("bbb"); PropertyMeta propertyMeta = factory.createPropertyMeta(field, entityMeta); assertEquals(RelationshipType.MANY_TO_ONE, propertyMeta .getRelationshipType()); assertEquals(MyBbb.class, propertyMeta.getRelationshipClass()); assertEquals(1, propertyMeta.getJoinColumnMetaList().size()); assertNull(propertyMeta.getColumnMeta()); } /** * @throws Exception */ public void testManyToOne_notEntity() throws Exception { entityMeta.setEntityClass(BadAaa2.class); entityMeta.setName("BadAaa2"); Field field = BadAaa2.class.getDeclaredField("myDto4"); try { factory.createPropertyMeta(field, entityMeta); fail(); } catch (RelationshipNotEntityRuntimeException e) { System.out.println(e); assertEquals("BadAaa2", e.getEntityName()); assertEquals("myDto4", e.getPropertyName()); } } /** * @throws Exception */ public void testInvalidProperty() throws Exception { entityMeta.setEntityClass(BadAaa2.class); entityMeta.setName("BadAaa2"); Field field = BadAaa2.class.getDeclaredField("myDto5"); try { factory.createPropertyMeta(field, entityMeta); fail(); } catch (UnsupportedPropertyTypeRuntimeException e) { System.out.println(e); assertEquals("BadAaa2", e.getEntityName()); assertEquals("myDto5", e.getPropertyName()); } } @Entity private static class MyAaa { /** * */ @Id public Integer id; /** * */ public Integer bbbId; /** * */ @OneToOne @JoinColumn(name = "BBB_ID", referencedColumnName = "ID") public MyBbb bbb; /** * */ public MyInt myInt; /** * */ public MySerializable mySerializable; /** * */ @Transient public String ignore; /** * */ @Transient public MyDto myDto; /** * */ @Lob public String largeName; /** * */ public Authority authority; } @Entity private static class MyBbb { /** * */ @Id public Integer id; /** * */ @OneToOne(mappedBy = "bbb") public MyAaa aaa; /** * */ @OneToMany(mappedBy = "bbb") public List<MyDdd> ddds; } @Entity private static class MyDdd { /** * */ @Id public Integer id; /** * */ public Integer bbbId; /** * */ @ManyToOne @JoinColumn(name = "BBB_ID", referencedColumnName = "ID") public MyBbb bbb; } @Entity private static class BadAaa2 { /** * */ @Id @JoinColumn @Basic(fetch = FetchType.LAZY) public Integer id; /** * */ public Integer cccId; /** * */ @OneToOne public MyDto myDto; /** * */ @OneToMany public List<MyDto> myDto3; /** * */ @ManyToOne public MyDto myDto4; /** * */ public MyDto myDto5; /** * */ @OneToOne(mappedBy = "xxx") public MyAaa aaa; /** * */ @OneToMany public MyAaa aaa2; /** * */ @SuppressWarnings("unchecked") @OneToMany public List aaa3; /** * */ @OneToMany(mappedBy = "xxx") public List<MyAaa> aaa4; /** * */ @OneToMany(mappedBy = "bbb") public List<MyAaa> aaa5; /** * */ @OneToOne(mappedBy = "bbb") @JoinColumn(name = "BBB_ID", referencedColumnName = "ID") public MyAaa aaa6; /** * */ @OneToMany(mappedBy = "bbb") @JoinColumn(name = "BBB_ID", referencedColumnName = "ID") public List<MyAaa> aaa7; /** * */ @OneToMany public List<MyAaa> aaa8; } private static class MyDto { } private static class MyInt implements Serializable { private static final long serialVersionUID = 1L; private int value; /** * @param value */ public MyInt(int value) { this.value = value; } /** * @param i * @return */ public static MyInt valueOf(int i) { return new MyInt(i); } /** * @return */ public int value() { return value; } } private static class MyEnum { /** */ public TemporalType type; /** */ @Enumerated public TemporalType ordinalType; /** */ @Enumerated(javax.persistence.EnumType.STRING) public TemporalType stringType; } private static class MySerializable implements Serializable { private static final long serialVersionUID = 1L; } private static class AutoGeneratedId { /** * */ @Id @GeneratedValue int id; } private static class IdentityGeneratedId { /** * */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) int id; } @SequenceGenerator(name = "aaa") private static class SequenceGeneratedId { /** * */ @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) int id; /** * */ @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "aaa") int id2; } @TableGenerator(name = "aaa") private static class TableGeneratedId { /** * */ @Id @GeneratedValue(strategy = GenerationType.TABLE) int id; /** * */ @Id @GeneratedValue(strategy = GenerationType.TABLE, generator = "aaa") int id2; } }