Search in sources :

Example 11 with Column

use of javax.persistence.Column in project hibernate-orm by hibernate.

the class AbstractPropertyHolder method buildColumnOverride.

private static Map<String, Column[]> buildColumnOverride(XAnnotatedElement element, String path) {
    Map<String, Column[]> columnOverride = new HashMap<String, Column[]>();
    if (element != null) {
        AttributeOverride singleOverride = element.getAnnotation(AttributeOverride.class);
        AttributeOverrides multipleOverrides = element.getAnnotation(AttributeOverrides.class);
        AttributeOverride[] overrides;
        if (singleOverride != null) {
            overrides = new AttributeOverride[] { singleOverride };
        } else if (multipleOverrides != null) {
            overrides = multipleOverrides.value();
        } else {
            overrides = null;
        }
        if (overrides != null) {
            Map<String, List<Column>> columnOverrideList = new HashMap<>();
            for (AttributeOverride depAttr : overrides) {
                String qualifiedName = StringHelper.qualify(path, depAttr.name());
                if (columnOverrideList.containsKey(qualifiedName)) {
                    columnOverrideList.get(qualifiedName).add(depAttr.column());
                } else {
                    columnOverrideList.put(qualifiedName, new ArrayList<>(Arrays.asList(depAttr.column())));
                }
            }
            for (Map.Entry<String, List<Column>> entry : columnOverrideList.entrySet()) {
                columnOverride.put(entry.getKey(), entry.getValue().toArray(new Column[entry.getValue().size()]));
            }
        }
    }
    return columnOverride;
}
Also used : AttributeOverrides(javax.persistence.AttributeOverrides) HashMap(java.util.HashMap) JoinColumn(javax.persistence.JoinColumn) Column(javax.persistence.Column) ArrayList(java.util.ArrayList) List(java.util.List) HashMap(java.util.HashMap) Map(java.util.Map) AttributeOverride(javax.persistence.AttributeOverride)

Example 12 with Column

use of javax.persistence.Column in project jeesuite-libs by vakinge.

the class EntityHelper method getEntityMapper.

/**
 * 由传入的实体的class构建TableMapper对象,构建好的对象存入缓存中,以后使用时直接从缓存中获取
 *
 * @param entityClass
 * @return TableMapper
 */
public static EntityMapper getEntityMapper(Class<?> entityClass) {
    synchronized (entityClass) {
        // 先从map中获取实体映射信息
        EntityMapper entityMapper = tableMapperCache.get(entityClass);
        // 如果存在直接返回
        if (entityMapper != null) {
            return entityMapper;
        }
        TableMapper tableMapper = getTableMapper(entityClass);
        // 获取实体ID泛型
        Class<?> idClass = getIdClass(entityClass);
        // 获取实体字段列表
        List<Field> fields = getAllField(entityClass);
        // 全部列
        Set<ColumnMapper> columnMapperSet = new HashSet<ColumnMapper>();
        // 主键
        ColumnMapper idColumn = null;
        GenerationType idStrategy = null;
        for (Field field : fields) {
            // 排除字段
            if (field.isAnnotationPresent(Transient.class)) {
                continue;
            }
            ColumnMapper columnMapper = new ColumnMapper();
            // 数据库字段名
            String columnName = null;
            if (field.isAnnotationPresent(Column.class)) {
                Column column = field.getAnnotation(Column.class);
                columnName = column.name();
                columnMapper.setInsertable(column.insertable());
                columnMapper.setUpdatable(column.updatable());
            }
            // 如果为空,使用属性名并替换为下划线风格
            if (columnName == null || columnName.equals("")) {
                columnName = camelhumpToUnderline(field.getName());
            }
            columnMapper.setProperty(field.getName());
            columnMapper.setColumn(columnName);
            columnMapper.setJavaType(field.getType());
            // 是否主键
            if (field.isAnnotationPresent(Id.class)) {
                columnMapper.setId(true);
                if (field.isAnnotationPresent(GeneratedValue.class)) {
                    idStrategy = field.getAnnotation(GeneratedValue.class).strategy();
                }
                idColumn = columnMapper;
            }
            // 添加到所有字段映射信息
            columnMapperSet.add(columnMapper);
        }
        if (columnMapperSet.size() <= 0) {
            throw new RuntimeException("实体" + entityClass.getName() + "不存在映射字段");
        }
        if (idColumn == null) {
            throw new RuntimeException("实体" + entityClass.getName() + "不存在主键或者");
        }
        // 解析实体映射信息
        entityMapper = new EntityMapper();
        entityMapper.setTableMapper(tableMapper);
        entityMapper.setColumnsMapper(columnMapperSet);
        entityMapper.setIdClass(idClass);
        entityMapper.setIdColumn(idColumn);
        entityMapper.setIdStrategy(idStrategy);
        tableMapperCache.put(entityClass, entityMapper);
        return entityMapper;
    }
}
Also used : Field(java.lang.reflect.Field) Column(javax.persistence.Column) HashSet(java.util.HashSet) GenerationType(javax.persistence.GenerationType)

Example 13 with Column

use of javax.persistence.Column in project jdbi by jdbi.

the class JpaClass method inspectProperties.

private static void inspectProperties(Class<?> clazz, Map<String, JpaMember> members, boolean hasColumnAnnotation) {
    try {
        Stream.of(Introspector.getBeanInfo(clazz).getPropertyDescriptors()).filter(property -> !members.containsKey(property.getName())).filter(property -> !(property instanceof IndexedPropertyDescriptor)).filter(property -> !"class".equals(property.getName())).forEach(property -> {
            Method getter = property.getReadMethod();
            Method setter = property.getWriteMethod();
            Column column = Stream.of(getter, setter).filter(Objects::nonNull).map(method -> method.getAnnotation(Column.class)).filter(Objects::nonNull).findFirst().orElse(null);
            if ((column != null) == hasColumnAnnotation) {
                members.put(property.getName(), new JpaMember(clazz, column, property));
            }
        });
    } catch (IntrospectionException e) {
        logger.warn("Unable to introspect " + clazz, e);
    }
}
Also used : Logger(org.slf4j.Logger) Collections.unmodifiableList(java.util.Collections.unmodifiableList) MappedSuperclass(javax.persistence.MappedSuperclass) Collection(java.util.Collection) LoggerFactory(org.slf4j.LoggerFactory) IndexedPropertyDescriptor(java.beans.IndexedPropertyDescriptor) HashMap(java.util.HashMap) Field(java.lang.reflect.Field) IntrospectionException(java.beans.IntrospectionException) ArrayList(java.util.ArrayList) Objects(java.util.Objects) Column(javax.persistence.Column) Introspector(java.beans.Introspector) List(java.util.List) Stream(java.util.stream.Stream) Locale(java.util.Locale) Collections.synchronizedMap(java.util.Collections.synchronizedMap) Map(java.util.Map) Method(java.lang.reflect.Method) WeakHashMap(java.util.WeakHashMap) Column(javax.persistence.Column) Objects(java.util.Objects) IntrospectionException(java.beans.IntrospectionException) IndexedPropertyDescriptor(java.beans.IndexedPropertyDescriptor) Method(java.lang.reflect.Method)

Example 14 with Column

use of javax.persistence.Column in project tephra by heisedebaise.

the class ModelTablesImpl method parse.

private void parse(Class<? extends Model> modelClass) {
    Table table = modelClass.getAnnotation(Table.class);
    if (table == null)
        return;
    ModelTable modelTable = BeanFactory.getBean(ModelTable.class);
    modelTable.setModelClass(modelClass);
    DataSource dataSource = modelClass.getAnnotation(DataSource.class);
    if (dataSource != null)
        modelTable.setDataSource(dataSource.key());
    modelTable.setTableName(table.name());
    Memory memory = modelClass.getAnnotation(Memory.class);
    if (memory != null)
        modelTable.setMemoryName(memory.name());
    Method[] methods = modelClass.getMethods();
    for (Method method : methods) {
        String name = method.getName();
        if (name.length() < 3)
            continue;
        if (name.equals("getId")) {
            modelTable.setIdColumnName(method.getAnnotation(Column.class).name());
            GenericGenerator generator = method.getAnnotation(GenericGenerator.class);
            if (generator != null && generator.name().toLowerCase().startsWith("uuid"))
                modelTable.setUuid(true);
            continue;
        }
        String propertyName = converter.toFirstLowerCase(name.substring(3));
        if (startsWith(name, 'g')) {
            modelTable.addGetMethod(propertyName, method);
            Column column = method.getAnnotation(Column.class);
            if (column != null)
                modelTable.addColumn(propertyName, column);
            continue;
        }
        if (startsWith(name, 's'))
            modelTable.addSetMethod(propertyName, method);
    }
    map.put(modelClass, modelTable);
}
Also used : Table(javax.persistence.Table) Column(javax.persistence.Column) Method(java.lang.reflect.Method) GenericGenerator(org.hibernate.annotations.GenericGenerator)

Example 15 with Column

use of javax.persistence.Column in project BroadleafCommerce by BroadleafCommerce.

the class OracleRequiredFieldManagerModifier method canHandle.

@Override
public boolean canHandle(Field field, Object value, EntityManager em) {
    if (!dialectHelper.isOracle(em)) {
        return false;
    }
    Column column = field.getAnnotation(Column.class);
    AdminPresentation adminPresentation = field.getAnnotation(AdminPresentation.class);
    return adminPresentation != null && isRequiredField(adminPresentation, column) && isStringFieldType(field, adminPresentation);
}
Also used : Column(javax.persistence.Column) AdminPresentation(org.broadleafcommerce.common.presentation.AdminPresentation) RequiredOverride(org.broadleafcommerce.common.presentation.RequiredOverride)

Aggregations

Column (javax.persistence.Column)45 Field (java.lang.reflect.Field)15 JoinColumn (javax.persistence.JoinColumn)15 Id (javax.persistence.Id)11 ArrayList (java.util.ArrayList)9 Method (java.lang.reflect.Method)8 HashMap (java.util.HashMap)8 MapKeyColumn (javax.persistence.MapKeyColumn)7 MapKeyJoinColumn (javax.persistence.MapKeyJoinColumn)7 OrderColumn (javax.persistence.OrderColumn)7 Annotation (java.lang.annotation.Annotation)6 ManyToOne (javax.persistence.ManyToOne)6 Date (java.util.Date)4 Map (java.util.Map)4 DiscriminatorColumn (javax.persistence.DiscriminatorColumn)4 ElementCollection (javax.persistence.ElementCollection)4 Enumerated (javax.persistence.Enumerated)4 GeneratedValue (javax.persistence.GeneratedValue)4 PrimaryKeyJoinColumn (javax.persistence.PrimaryKeyJoinColumn)4 XProperty (org.hibernate.annotations.common.reflection.XProperty)4