List of usage examples for org.hibernate.mapping OneToMany OneToMany
public OneToMany(MetadataBuildingContext buildingContext, PersistentClass owner) throws MappingException
From source file:com.manydesigns.portofino.persistence.hibernate.HibernateConfig.java
License:Open Source License
protected void createO2M(Configuration config, Mappings mappings, ForeignKey relationship) { com.manydesigns.portofino.model.database.Table manyMDTable = relationship.getFromTable(); com.manydesigns.portofino.model.database.Table oneMDTable = relationship.getToTable(); //Se la classe One non e' dinamica e // non ha la proprieta' non inserisco la relazione if (oneMDTable.getJavaClass() != null) { try {/*from w w w . j ava2 s .c o m*/ Class oneClass = oneMDTable.getActualJavaClass(); JavaClassAccessor accessor = JavaClassAccessor.getClassAccessor(oneClass); PropertyAccessor[] propertyAccessors = accessor.getProperties(); boolean found = false; for (PropertyAccessor propertyAccessor : propertyAccessors) { if (propertyAccessor.getName().equals(relationship.getActualManyPropertyName())) { found = true; } } if (!found) { logger.warn("Property '{}' not found, skipping relationship {}", relationship.getActualManyPropertyName(), relationship.getQualifiedName()); return; } } catch (Exception e) { //se non c'e' non inserisco la relazione logger.warn("Property not found, skipping relationship ", e); return; } } //relazione virtuali fra Database differenti if (!manyMDTable.getDatabaseName().equalsIgnoreCase(oneMDTable.getDatabaseName())) { logger.warn("Relationship crosses databases, skipping: {}", relationship.getQualifiedName()); return; } String manyMDQualifiedTableName = manyMDTable.getActualEntityName(); String oneMDQualifiedTableName = oneMDTable.getActualEntityName(); PersistentClass clazzOne = config.getClassMapping(oneMDQualifiedTableName); if (clazzOne == null) { logger.error("Cannot find table '{}' as 'one' side of foreign key '{}'. Skipping relationship.", oneMDQualifiedTableName, relationship.getName()); return; } PersistentClass clazzMany = config.getClassMapping(manyMDQualifiedTableName); if (clazzMany == null) { logger.error("Cannot find table '{}' as 'many' side of foreign key '{}'. Skipping relationship.", manyMDQualifiedTableName, relationship.getName()); return; } //Uso i Bag perche' i set non funzionano con i componenti dinamici Bag set = new Bag(mappings, clazzOne); // Mettere Lazy in debug a false per ottenere subito eventuali errori // nelle relazioni set.setLazy(LAZY); set.setRole( relationship.getToTable().getActualEntityName() + "." + relationship.getActualManyPropertyName()); //set.setNodeName(relationship.getActualManyPropertyName()); set.setCollectionTable(clazzMany.getTable()); OneToMany oneToMany = new OneToMany(mappings, set.getOwner()); set.setElement(oneToMany); oneToMany.setReferencedEntityName(manyMDQualifiedTableName); oneToMany.setAssociatedClass(clazzMany); oneToMany.setEmbedded(true); set.setSorted(false); set.setFetchMode(FetchMode.DEFAULT); //Riferimenti alle colonne DependantValue dv; Table tableMany = clazzMany.getTable(); Table tableOne = clazzOne.getTable(); List<Column> oneColumns = new ArrayList<Column>(); List<Column> manyColumns = new ArrayList<Column>(); //Chiave multipla final List<Reference> refs = relationship.getReferences(); if (refs.size() > 1) { dv = createFKComposite(mappings, relationship, manyMDTable, clazzOne, clazzMany, set, tableMany, tableOne, oneColumns, manyColumns); } else { //chiave straniera singola dv = createFKSingle(mappings, clazzOne, clazzMany, tableOne, oneColumns, manyColumns, refs); } tableMany.createForeignKey(relationship.getName(), manyColumns, oneMDQualifiedTableName, oneColumns); dv.setNullable(false); set.setKey(dv); mappings.addCollection(set); Property prop = new Property(); prop.setName(relationship.getActualManyPropertyName()); //prop.setNodeName(relationship.getActualManyPropertyName()); prop.setValue(set); if (ForeignKeyConstraintType.importedKeyCascade.name().equalsIgnoreCase(relationship.getOnDelete())) { prop.setCascade("delete"); } else { prop.setCascade("none"); } clazzOne.addProperty(prop); //if(!StringUtils.) }
From source file:org.codehaus.groovy.grails.orm.hibernate.cfg.AbstractGrailsDomainBinder.java
License:Apache License
/** * First pass to bind collection to Hibernate metamodel, sets up second pass * * @param property The GrailsDomainClassProperty instance * @param collection The collection/* w w w. j a v a 2s .c om*/ * @param owner The owning persistent class * @param mappings The Hibernate mappings instance * @param path */ protected void bindCollection(GrailsDomainClassProperty property, Collection collection, PersistentClass owner, Mappings mappings, String path, String sessionFactoryBeanName) { // set role String propertyName = getNameForPropertyAndPath(property, path); collection.setRole(qualify(property.getDomainClass().getFullName(), propertyName)); PropertyConfig pc = getPropertyConfig(property); // configure eager fetching if (property.getFetchMode() == GrailsDomainClassProperty.FETCH_EAGER) { collection.setFetchMode(FetchMode.JOIN); } else if (pc != null && pc.getFetch() != null) { collection.setFetchMode(pc.getFetch()); } else { collection.setFetchMode(FetchMode.DEFAULT); } if (pc != null && pc.getCascade() != null) { collection.setOrphanDelete(pc.getCascade().equals(CASCADE_ALL_DELETE_ORPHAN)); } // if it's a one-to-many mapping if (shouldBindCollectionWithForeignKey(property)) { OneToMany oneToMany = new OneToMany(mappings, collection.getOwner()); collection.setElement(oneToMany); bindOneToMany(property, oneToMany, mappings); } else { bindCollectionTable(property, mappings, collection, owner.getTable(), sessionFactoryBeanName); if (!property.isOwningSide()) { collection.setInverse(true); } } if (pc != null && pc.getBatchSize() != null) { collection.setBatchSize(pc.getBatchSize().intValue()); } // set up second pass if (collection instanceof org.hibernate.mapping.Set) { mappings.addSecondPass( new GrailsCollectionSecondPass(property, mappings, collection, sessionFactoryBeanName)); } else if (collection instanceof org.hibernate.mapping.List) { mappings.addSecondPass(new ListSecondPass(property, mappings, collection, sessionFactoryBeanName)); } else if (collection instanceof org.hibernate.mapping.Map) { mappings.addSecondPass(new MapSecondPass(property, mappings, collection, sessionFactoryBeanName)); } else { // Collection -> Bag mappings.addSecondPass( new GrailsCollectionSecondPass(property, mappings, collection, sessionFactoryBeanName)); } }
From source file:org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsDomainBinder.java
License:Apache License
/** * First pass to bind collection to Hibernate metamodel, sets up second pass * * @param property The GrailsDomainClassProperty instance * @param collection The collection//from w ww . j a va 2s . c om * @param owner The owning persistent class * @param mappings The Hibernate mappings instance * @param path */ private static void bindCollection(GrailsDomainClassProperty property, Collection collection, PersistentClass owner, Mappings mappings, String path, String sessionFactoryBeanName) { // set role String propertyName = getNameForPropertyAndPath(property, path); collection.setRole(StringHelper.qualify(property.getDomainClass().getFullName(), propertyName)); PropertyConfig pc = getPropertyConfig(property); // configure eager fetching if (property.getFetchMode() == GrailsDomainClassProperty.FETCH_EAGER) { collection.setFetchMode(FetchMode.JOIN); } else if (pc != null && pc.getFetch() != null) { collection.setFetchMode(pc.getFetch()); } else { collection.setFetchMode(FetchMode.DEFAULT); } if (pc != null && pc.getCascade() != null) { collection.setOrphanDelete(pc.getCascade().equals(CASCADE_ALL_DELETE_ORPHAN)); } // if it's a one-to-many mapping if (shouldBindCollectionWithForeignKey(property)) { OneToMany oneToMany = new OneToMany(mappings, collection.getOwner()); collection.setElement(oneToMany); bindOneToMany(property, oneToMany, mappings); } else { bindCollectionTable(property, mappings, collection, owner.getTable(), sessionFactoryBeanName); if (!property.isOwningSide()) { collection.setInverse(true); } } if (pc != null && pc.getBatchSize() != null) { collection.setBatchSize(pc.getBatchSize().intValue()); } // set up second pass if (collection instanceof org.hibernate.mapping.Set) { mappings.addSecondPass( new GrailsCollectionSecondPass(property, mappings, collection, sessionFactoryBeanName)); } else if (collection instanceof org.hibernate.mapping.List) { mappings.addSecondPass(new ListSecondPass(property, mappings, collection, sessionFactoryBeanName)); } else if (collection instanceof org.hibernate.mapping.Map) { mappings.addSecondPass(new MapSecondPass(property, mappings, collection, sessionFactoryBeanName)); } else { // Collection -> Bag mappings.addSecondPass( new GrailsCollectionSecondPass(property, mappings, collection, sessionFactoryBeanName)); } }
From source file:org.grails.orm.hibernate.cfg.AbstractGrailsDomainBinder.java
License:Apache License
/** * First pass to bind collection to Hibernate metamodel, sets up second pass * * @param property The GrailsDomainClassProperty instance * @param collection The collection//from w w w . j a v a 2 s . c o m * @param owner The owning persistent class * @param mappings The Hibernate mappings instance * @param path */ protected void bindCollection(ToMany property, Collection collection, PersistentClass owner, Mappings mappings, String path, String sessionFactoryBeanName) { // set role String propertyName = getNameForPropertyAndPath(property, path); collection.setRole(qualify(property.getOwner().getName(), propertyName)); PropertyConfig pc = getPropertyConfig(property); // configure eager fetching final FetchMode fetchMode = pc.getFetchMode(); if (fetchMode == FetchMode.JOIN) { collection.setFetchMode(FetchMode.JOIN); } else if (pc.getFetchMode() != null) { collection.setFetchMode(pc.getFetchMode()); } else { collection.setFetchMode(FetchMode.DEFAULT); } if (pc.getCascade() != null) { collection.setOrphanDelete(pc.getCascade().equals(CASCADE_ALL_DELETE_ORPHAN)); } // if it's a one-to-many mapping if (shouldBindCollectionWithForeignKey(property)) { OneToMany oneToMany = new OneToMany(mappings, collection.getOwner()); collection.setElement(oneToMany); bindOneToMany((org.grails.datastore.mapping.model.types.OneToMany) property, oneToMany, mappings); } else { bindCollectionTable(property, mappings, collection, owner.getTable(), sessionFactoryBeanName); if (!property.isOwningSide()) { collection.setInverse(true); } } if (pc.getBatchSize() != null) { collection.setBatchSize(pc.getBatchSize()); } // set up second pass if (collection instanceof org.hibernate.mapping.Set) { mappings.addSecondPass( new GrailsCollectionSecondPass(property, mappings, collection, sessionFactoryBeanName)); } else if (collection instanceof org.hibernate.mapping.List) { mappings.addSecondPass(new ListSecondPass(property, mappings, collection, sessionFactoryBeanName)); } else if (collection instanceof org.hibernate.mapping.Map) { mappings.addSecondPass(new MapSecondPass(property, mappings, collection, sessionFactoryBeanName)); } else { // Collection -> Bag mappings.addSecondPass( new GrailsCollectionSecondPass(property, mappings, collection, sessionFactoryBeanName)); } }
From source file:org.grails.orm.hibernate.cfg.GrailsDomainBinder.java
License:Apache License
/** * First pass to bind collection to Hibernate metamodel, sets up second pass * * @param property The GrailsDomainClassProperty instance * @param collection The collection// w ww. j a v a 2 s . com * @param owner The owning persistent class * @param mappings The Hibernate mappings instance * @param path */ protected void bindCollection(ToMany property, Collection collection, PersistentClass owner, InFlightMetadataCollector mappings, String path, String sessionFactoryBeanName) { // set role String propertyName = getNameForPropertyAndPath(property, path); collection.setRole(qualify(property.getOwner().getName(), propertyName)); PropertyConfig pc = getPropertyConfig(property); // configure eager fetching final FetchMode fetchMode = pc.getFetchMode(); if (fetchMode == FetchMode.JOIN) { collection.setFetchMode(FetchMode.JOIN); } else if (pc.getFetchMode() != null) { collection.setFetchMode(pc.getFetchMode()); } else { collection.setFetchMode(FetchMode.DEFAULT); } if (pc.getCascade() != null) { collection.setOrphanDelete(pc.getCascade().equals(CASCADE_ALL_DELETE_ORPHAN)); } // if it's a one-to-many mapping if (shouldBindCollectionWithForeignKey(property)) { OneToMany oneToMany = new OneToMany(mappings, collection.getOwner()); collection.setElement(oneToMany); bindOneToMany((org.grails.datastore.mapping.model.types.OneToMany) property, oneToMany, mappings); } else { bindCollectionTable(property, mappings, collection, owner.getTable(), sessionFactoryBeanName); if (!property.isOwningSide()) { collection.setInverse(true); } } if (pc.getBatchSize() != null) { collection.setBatchSize(pc.getBatchSize()); } // set up second pass if (collection instanceof org.hibernate.mapping.Set) { mappings.addSecondPass( new GrailsCollectionSecondPass(property, mappings, collection, sessionFactoryBeanName)); } else if (collection instanceof org.hibernate.mapping.List) { mappings.addSecondPass(new ListSecondPass(property, mappings, collection, sessionFactoryBeanName)); } else if (collection instanceof org.hibernate.mapping.Map) { mappings.addSecondPass(new MapSecondPass(property, mappings, collection, sessionFactoryBeanName)); } else { // Collection -> Bag mappings.addSecondPass( new GrailsCollectionSecondPass(property, mappings, collection, sessionFactoryBeanName)); } }