Example usage for org.hibernate.persister.entity AbstractEntityPersister getKeyColumnNames

List of usage examples for org.hibernate.persister.entity AbstractEntityPersister getKeyColumnNames

Introduction

In this page you can find the example usage for org.hibernate.persister.entity AbstractEntityPersister getKeyColumnNames.

Prototype

public String[] getKeyColumnNames() 

Source Link

Usage

From source file:com.blazebit.persistence.integration.hibernate.base.HibernateJpaProvider.java

License:Apache License

@Override
public JoinTable getJoinTable(EntityType<?> ownerType, String attributeName) {
    CollectionPersister persister = getCollectionPersister(ownerType, attributeName);
    if (persister instanceof QueryableCollection) {
        QueryableCollection queryableCollection = (QueryableCollection) persister;

        if (!queryableCollection.getElementType().isEntityType()) {
            String[] targetColumnMetaData = queryableCollection.getElementColumnNames();
            Map<String, String> targetColumnMapping = new HashMap<>();

            for (int i = 0; i < targetColumnMetaData.length; i++) {
                targetColumnMapping.put(targetColumnMetaData[i], targetColumnMetaData[i]);
            }/* w ww.j  a va 2 s .  c  o m*/
            return createJoinTable(ownerType, queryableCollection, targetColumnMapping, null, attributeName);
        } else if (queryableCollection.getElementPersister() instanceof Joinable) {
            String elementTableName = ((Joinable) queryableCollection.getElementPersister()).getTableName();
            if (!queryableCollection.getTableName().equals(elementTableName)) {
                String[] targetColumnMetaData = queryableCollection.getElementColumnNames();
                AbstractEntityPersister elementPersister = (AbstractEntityPersister) queryableCollection
                        .getElementPersister();
                String[] targetPrimaryKeyColumnMetaData = elementPersister.getKeyColumnNames();
                Map<String, String> targetIdColumnMapping = new HashMap<>();

                for (int i = 0; i < targetColumnMetaData.length; i++) {
                    targetIdColumnMapping.put(targetColumnMetaData[i], targetPrimaryKeyColumnMetaData[i]);
                }
                Set<String> idAttributeNames = getColumnMatchingAttributeNames(elementPersister,
                        Arrays.asList(targetPrimaryKeyColumnMetaData));
                return createJoinTable(ownerType, queryableCollection, targetIdColumnMapping, idAttributeNames,
                        attributeName);
            }
        }
    }
    return null;
}

From source file:com.blazebit.persistence.integration.hibernate.base.HibernateJpaProvider.java

License:Apache License

private JoinTable createJoinTable(EntityType<?> ownerType, QueryableCollection queryableCollection,
        Map<String, String> targetColumnMapping, Set<String> targetIdAttributeNames, String attributeName) {
    String[] indexColumnNames = queryableCollection.getIndexColumnNames();
    Map<String, String> keyColumnMapping = null;
    Map<String, String> keyColumnTypes = null;
    if (indexColumnNames != null) {
        keyColumnMapping = new HashMap<>(indexColumnNames.length);
        keyColumnTypes = new HashMap<>(indexColumnNames.length);
        if (queryableCollection.getKeyType().isEntityType()) {
            throw new IllegalArgumentException(
                    "Determining the join table key foreign key mappings is not yet supported!");
        } else {// w  ww  . j  a v a  2 s .c o m
            keyColumnMapping.put(indexColumnNames[0], indexColumnNames[0]);
            keyColumnTypes.put(indexColumnNames[0], getColumnTypeForPropertyType(ownerType, attributeName,
                    queryableCollection.getFactory(), queryableCollection.getIndexType())[0]);
        }
    }
    AbstractEntityPersister ownerEntityPersister = (AbstractEntityPersister) queryableCollection
            .getOwnerEntityPersister();
    String[] primaryKeyColumnMetaData = ownerEntityPersister.getKeyColumnNames();
    String[] foreignKeyColumnMetaData = queryableCollection.getKeyColumnNames();
    Map<String, String> idColumnMapping = new HashMap<>(primaryKeyColumnMetaData.length);
    for (int i = 0; i < foreignKeyColumnMetaData.length; i++) {
        idColumnMapping.put(foreignKeyColumnMetaData[i], primaryKeyColumnMetaData[i]);
    }
    Set<String> idAttributeNames = getColumnMatchingAttributeNames(ownerEntityPersister,
            Arrays.asList(primaryKeyColumnMetaData));
    if (targetIdAttributeNames == null) {
        Type elementType = queryableCollection.getElementType();
        if (elementType instanceof ComponentType) {
            targetIdAttributeNames = new HashSet<>();
            collectPropertyNames(targetIdAttributeNames, null, elementType, queryableCollection.getFactory());
        }
    }

    return new JoinTable(queryableCollection.getTableName(), idAttributeNames, idColumnMapping,
            keyColumnMapping, keyColumnTypes, targetIdAttributeNames, targetColumnMapping);
}