private boolean isPresent(FieldInfo field) { String columnName = field.getColumnName(); String fieldName = field.getFieldName(); for (FieldInfo f : this) { if (f.getFieldName().equals(fieldName) || f.getColumnName().equals(columnName)) { return true; } } return false; }
public EntityInfoBuilder<T> addField(FieldInfo fieldInfo) { validate(fieldInfo.getColumnName()); Function<Object, Object> accessor = accesorFactory.getAccessor(entityClass, fieldInfo.getFieldName()); return addColumn(new ColumnInfo(fieldInfo.getColumnName(), fieldInfo.getFieldType(), accessor)); }
public List<FieldInfo> getFields() { if (!reviewSupportedRelations(field)) { return Collections.emptyList(); } String name = field.getName(); Class<?> javaType = field.getType(); FieldsCollection currentClassFields = getIdFieldsFromClass(javaType); if (currentClassFields.size() == 0) { logger.warn(javaType.getName() + " has no simple @id annotation. Relation not persisted."); return Collections.emptyList(); } if (currentClassFields.size() == 1) { FieldInfo fieldId = currentClassFields.get(0); JoinColumn joinColumn = field.getAnnotation(JoinColumn.class); String columnName = null; if (joinColumn != null) { columnName = joinColumn.name(); } else { columnName = name + "_" + fieldId.getColumnName(); } return asList(fieldId.prependName(name).withColumnName(columnName)); } return currentClassFields.stream().map(field -> { String columnName = name + "_" + field.getColumnName(); return field.prependName(name).withColumnName(columnName); }).collect(toList()); }
public EntityInfo inspect() { JpaFieldsInspector fieldsInspector = new JpaFieldsInspector(); List<FieldInfo> fieldsFromClass = fieldsInspector.getFieldsFromClass(entityClass); EntityFieldAccesorFactory factory = new EntityFieldAccesorFactory(); List<ColumnInfo> columns = fieldsFromClass.stream().map(field -> { Function<Object, Object> accessor = factory.getAccessor(entityClass, field.getFieldName()); return new ColumnInfo(field.getColumnName(), field.getFieldType(), accessor); }).collect(Collectors.toList()); return new EntityInfo(entityClass, getTableName(), columns); }
@Test public void inspectEntityWithAttributeOverride() { List<FieldInfo> fields = fieldsInspector.getFieldsFromClass(ChildClassWithAttributeOverride.class); assertEquals(2, fields.size()); assertEquals("otherField", fields.get(0).getFieldName()); assertEquals("someField", fields.get(1).getFieldName()); assertEquals("field_override", fields.get(1).getColumnName()); }
@Test public void inspectEntityWithAttributeOverrides() { List<FieldInfo> fields = fieldsInspector.getFieldsFromClass(ChildClassWithAttributeOverrides.class); assertEquals(2, fields.size()); assertEquals("otherField", fields.get(0).getFieldName()); assertEquals("someField", fields.get(1).getFieldName()); assertEquals("field_override", fields.get(1).getColumnName()); }
@Test public void inspectColumnByPropertyName() { List<FieldInfo> fields = fieldsInspector.getFieldsFromClass(SimpleEntityUnannotated.class); assertEquals(1, fields.size()); FieldInfo field = fields.get(0); assertEquals("someField", field.getColumnName()); assertEquals("someField", field.getFieldName()); }
@Test public void inspectColumnByColumnAnnotation() { List<FieldInfo> fields = fieldsInspector.getFieldsFromClass(SimpleEntityAnnotated.class); assertEquals(1, fields.size()); FieldInfo field = fields.get(0); assertEquals("some_column", field.getColumnName()); assertEquals("someField", field.getFieldName()); }
@Test public void nonIdentifiedIsNotMapped() { List<FieldInfo> fields = fieldsInspector.getFieldsFromClass(Foo.class); assertEquals(1, fields.size()); FieldInfo id = fields.get(0); assertEquals(FieldTypeEnum.LONG, id.getFieldType().getFieldType()); assertEquals("id", id.getColumnName()); }
@Test public void joinTableIsNotMapped() { List<FieldInfo> fields = fieldsInspector.getFieldsFromClass(Bar.class); assertEquals(1, fields.size()); FieldInfo id = fields.get(0); assertEquals(FieldTypeEnum.STRING, id.getFieldType().getFieldType()); assertEquals("uuid", id.getColumnName()); }
@Test public void inspectAnEntityWithManyToOneRelationship() { EntityInspectHelper entityInfo = new EntityInspectHelper(Sku.class); FieldInfo id = entityInfo.findField("id"); assertEquals(FieldTypeEnum.LONG, id.getFieldType().getFieldType()); assertEquals("id", id.getColumnName()); FieldInfo reference = entityInfo.findField("reference"); assertEquals(FieldTypeEnum.STRING, reference.getFieldType().getFieldType()); assertEquals("reference", reference.getColumnName()); FieldInfo street = entityInfo.findField("product.id"); assertEquals(FieldTypeEnum.LONG, street.getFieldType().getFieldType()); assertEquals("product_id", street.getColumnName()); }
@Test public void inspectEmbeddedIdEntity() { EntityInspectHelper entityInfo = new EntityInspectHelper(SomeClass.class); FieldInfo someId = entityInfo.findField("key.someId"); assertEquals(FieldTypeEnum.STRING, someId.getFieldType().getFieldType()); assertEquals("someId", someId.getColumnName()); FieldInfo otherId = entityInfo.findField("key.otherId"); assertEquals(FieldTypeEnum.LONG, otherId.getFieldType().getFieldType()); assertEquals("otherId", otherId.getColumnName()); FieldInfo someValue = entityInfo.findField("someValue"); assertEquals(FieldTypeEnum.STRING, someValue.getFieldType().getFieldType()); assertEquals("someValue", someValue.getColumnName()); }
@Test public void inspectAnEntityWithOneToOneRelationShip() { EntityInspectHelper entityInfo = new EntityInspectHelper(Product.class); FieldInfo id = entityInfo.findField("id"); assertEquals(FieldTypeEnum.LONG, id.getFieldType().getFieldType()); assertEquals("id", id.getColumnName()); FieldInfo name = entityInfo.findField("name"); assertEquals(FieldTypeEnum.STRING, name.getFieldType().getFieldType()); assertEquals("name", name.getColumnName()); FieldInfo street = entityInfo.findField("product.id"); assertEquals(FieldTypeEnum.LONG, street.getFieldType().getFieldType()); assertEquals("product_id", street.getColumnName()); }
@Test public void inspectEmbeddedIdEntityWithOverride() { EntityInspectHelper entityInfo = new EntityInspectHelper(SomeClassWithOverride.class); FieldInfo someId = entityInfo.findField("key.someId"); assertEquals(FieldTypeEnum.STRING, someId.getFieldType().getFieldType()); assertEquals("id_string", someId.getColumnName()); FieldInfo otherId = entityInfo.findField("key.otherId"); assertEquals(FieldTypeEnum.LONG, otherId.getFieldType().getFieldType()); assertEquals("id_long", otherId.getColumnName()); FieldInfo someValue = entityInfo.findField("someValue"); assertEquals(FieldTypeEnum.STRING, someValue.getFieldType().getFieldType()); assertEquals("value", someValue.getColumnName()); }
@Test public void inspectAnEntityWithManyToOneJoinColumn() { EntityInspectHelper entityInfo = new EntityInspectHelper(Foo.class); FieldInfo id = entityInfo.findField("id"); assertEquals(FieldTypeEnum.LONG, id.getFieldType().getFieldType()); assertEquals("id", id.getColumnName()); FieldInfo street = entityInfo.findField("productRef.id"); assertEquals(FieldTypeEnum.LONG, street.getFieldType().getFieldType()); assertEquals("foo_id_product_fk", street.getColumnName()); }
@Test public void inspectAnEntityWithOneToOneJoinColumn() { EntityInspectHelper entityInfo = new EntityInspectHelper(ProductJoin.class); FieldInfo id = entityInfo.findField("id"); assertEquals(FieldTypeEnum.LONG, id.getFieldType().getFieldType()); assertEquals("id", id.getColumnName()); FieldInfo street = entityInfo.findField("productRef.id"); assertEquals(FieldTypeEnum.LONG, street.getFieldType().getFieldType()); assertEquals("ref_id_product_fk", street.getColumnName()); }
@Test public void inspectEmbeddedEntity() { EntityInspectHelper entityInfo = new EntityInspectHelper(Person.class); FieldInfo id = entityInfo.findField("id"); assertEquals(FieldTypeEnum.LONG, id.getFieldType().getFieldType()); assertEquals("id", id.getColumnName()); FieldInfo name = entityInfo.findField("name"); assertEquals(FieldTypeEnum.STRING, name.getFieldType().getFieldType()); assertEquals("name", name.getColumnName()); FieldInfo street = entityInfo.findField("address.street"); assertEquals(FieldTypeEnum.STRING, street.getFieldType().getFieldType()); assertEquals("street", street.getColumnName()); FieldInfo city = entityInfo.findField("address.city"); assertEquals(FieldTypeEnum.STRING, city.getFieldType().getFieldType()); assertEquals("city", city.getColumnName()); }
@Test public void inspectEmbeddedEntityWithAttributeOverrides() { EntityInspectHelper entityInfo = new EntityInspectHelper(Company.class); FieldInfo id = entityInfo.findField("id"); assertEquals(FieldTypeEnum.LONG, id.getFieldType().getFieldType()); assertEquals("id", id.getColumnName()); FieldInfo name = entityInfo.findField("name"); assertEquals(FieldTypeEnum.STRING, name.getFieldType().getFieldType()); assertEquals("name", name.getColumnName()); FieldInfo postalStreet = entityInfo.findField("postalAddress.street"); assertEquals(FieldTypeEnum.STRING, postalStreet.getFieldType().getFieldType()); assertEquals("postal_street", postalStreet.getColumnName()); FieldInfo postalCity = entityInfo.findField("postalAddress.city"); assertEquals(FieldTypeEnum.STRING, postalCity.getFieldType().getFieldType()); assertEquals("postal_city", postalCity.getColumnName()); FieldInfo fiscalStreet = entityInfo.findField("fiscalAddress.street"); assertEquals(FieldTypeEnum.STRING, fiscalStreet.getFieldType().getFieldType()); assertEquals("fiscal_street", fiscalStreet.getColumnName()); FieldInfo fiscalCity = entityInfo.findField("fiscalAddress.city"); assertEquals(FieldTypeEnum.STRING, fiscalCity.getFieldType().getFieldType()); assertEquals("fiscal_city", fiscalCity.getColumnName()); }