use of org.hibernate.type.SetType in project hibernate-orm by hibernate.
the class CollectionMetadataGenerator method addMapper.
private void addMapper(CommonCollectionMapperData commonCollectionMapperData, MiddleComponentData elementComponentData, MiddleComponentData indexComponentData) {
final Type type = propertyValue.getType();
final boolean embeddableElementType = isEmbeddableElementType();
final boolean lobMapElementType = isLobMapElementType();
if (type instanceof SortedSetType) {
currentMapper.addComposite(propertyAuditingData.getPropertyData(), new SortedSetCollectionMapper(commonCollectionMapperData, TreeSet.class, SortedSetProxy.class, elementComponentData, propertyValue.getComparator(), embeddableElementType, embeddableElementType));
} else if (type instanceof SetType) {
currentMapper.addComposite(propertyAuditingData.getPropertyData(), new BasicCollectionMapper<Set>(commonCollectionMapperData, HashSet.class, SetProxy.class, elementComponentData, embeddableElementType, embeddableElementType));
} else if (type instanceof SortedMapType) {
// Indexed collection, so <code>indexComponentData</code> is not null.
currentMapper.addComposite(propertyAuditingData.getPropertyData(), new SortedMapCollectionMapper(commonCollectionMapperData, TreeMap.class, SortedMapProxy.class, elementComponentData, indexComponentData, propertyValue.getComparator(), embeddableElementType || lobMapElementType));
} else if (type instanceof MapType) {
// Indexed collection, so <code>indexComponentData</code> is not null.
currentMapper.addComposite(propertyAuditingData.getPropertyData(), new MapCollectionMapper<Map>(commonCollectionMapperData, HashMap.class, MapProxy.class, elementComponentData, indexComponentData, embeddableElementType || lobMapElementType));
} else if (type instanceof BagType) {
currentMapper.addComposite(propertyAuditingData.getPropertyData(), new BasicCollectionMapper<List>(commonCollectionMapperData, ArrayList.class, ListProxy.class, elementComponentData, embeddableElementType, embeddableElementType));
} else if (type instanceof ListType) {
// Indexed collection, so <code>indexComponentData</code> is not null.
currentMapper.addComposite(propertyAuditingData.getPropertyData(), new ListCollectionMapper(commonCollectionMapperData, elementComponentData, indexComponentData, embeddableElementType));
} else {
mainGenerator.throwUnsupportedTypeException(type, referencingEntityName, propertyName);
}
}
use of org.hibernate.type.SetType in project hibernate-orm by hibernate.
the class CollectionMetadataGenerator method addCollection.
void addCollection() {
final Type type = propertyValue.getType();
final Value value = propertyValue.getElement();
final boolean oneToManyAttachedType = type instanceof BagType || type instanceof SetType || type instanceof MapType || type instanceof ListType;
final boolean inverseOneToMany = (value instanceof OneToMany) && (propertyValue.isInverse());
final boolean owningManyToOneWithJoinTableBidirectional = (value instanceof ManyToOne) && (propertyAuditingData.getRelationMappedBy() != null);
final boolean fakeOneToManyBidirectional = (value instanceof OneToMany) && (propertyAuditingData.getAuditMappedBy() != null);
if (oneToManyAttachedType && (inverseOneToMany || fakeOneToManyBidirectional || owningManyToOneWithJoinTableBidirectional)) {
// A one-to-many relation mapped using @ManyToOne and @OneToMany(mappedBy="...")
addOneToManyAttached(fakeOneToManyBidirectional);
} else {
// All other kinds of relations require a middle (join) table.
addWithMiddleTable();
}
}
use of org.hibernate.type.SetType in project dhis2-core by dhis2.
the class AbstractPropertyIntrospectorService method updateJoinTables.
protected void updateJoinTables() {
if (!roleToRole.isEmpty()) {
return;
}
Map<String, List<String>> joinTableToRoles = new HashMap<>();
SessionFactoryImplementor sessionFactoryImplementor = (SessionFactoryImplementor) sessionFactory;
Iterator<?> collectionIterator = sessionFactory.getAllCollectionMetadata().values().iterator();
while (collectionIterator.hasNext()) {
CollectionPersister collectionPersister = (CollectionPersister) collectionIterator.next();
CollectionType collectionType = collectionPersister.getCollectionType();
if (collectionPersister.isManyToMany() && collectionType.isAssociationType()) {
Joinable associatedJoinable = collectionType.getAssociatedJoinable(sessionFactoryImplementor);
if (!joinTableToRoles.containsKey(associatedJoinable.getTableName())) {
joinTableToRoles.put(associatedJoinable.getTableName(), new ArrayList<>());
}
joinTableToRoles.get(associatedJoinable.getTableName()).add(collectionPersister.getRole());
} else if (collectionPersister.isInverse()) {
if (SetType.class.isInstance(collectionType)) {
SetType setType = (SetType) collectionType;
setType.getAssociatedJoinable(sessionFactoryImplementor);
}
}
}
Iterator<Map.Entry<String, List<String>>> entryIterator = joinTableToRoles.entrySet().iterator();
while (entryIterator.hasNext()) {
Map.Entry<String, List<String>> entry = entryIterator.next();
if (entry.getValue().size() < 2) {
entryIterator.remove();
}
}
for (Map.Entry<String, List<String>> entry : joinTableToRoles.entrySet()) {
roleToRole.put(entry.getValue().get(0), entry.getValue().get(1));
roleToRole.put(entry.getValue().get(1), entry.getValue().get(0));
}
}
Aggregations