List of usage examples for org.hibernate.persister.entity AbstractEntityPersister getKeyColumnNames
public String[] getKeyColumnNames()
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); }