List of usage examples for org.hibernate.mapping Property setCascade
public void setCascade(String cascade)
From source file:com.manydesigns.portofino.persistence.hibernate.HibernateConfig.java
License:Open Source License
protected void createPKComposite(Mappings mappings, com.manydesigns.portofino.model.database.Table mdTable, String pkName, RootClass clazz, Table tab, List<com.manydesigns.portofino.model.database.Column> columnPKList) { PrimaryKey primaryKey = new PrimaryKey(); primaryKey.setName(pkName);/*from ww w .j a v a2 s . co m*/ primaryKey.setTable(tab); clazz.setEmbeddedIdentifier(true); Component component = new Component(mappings, clazz); component.setDynamic(mdTable.getActualJavaClass() == null); String name; name = mdTable.getQualifiedName(); component.setRoleName(name + ".id"); component.setEmbedded(true); //component.setNodeName("id"); component.setKey(true); component.setNullValue("undefined"); if (!component.isDynamic()) { component.setComponentClassName(mdTable.getJavaClass()); //TODO verificare se non si intende actualJavaClass } boolean hasErrors = false; for (com.manydesigns.portofino.model.database.Column column : columnPKList) { if (column == null) { throw new InternalError("Null column"); } Column col = createColumn(mappings, tab, column); hasErrors = col == null || hasErrors; if (col != null) { primaryKey.addColumn(col); Property prop = createProperty(column, col.getValue()); prop.setCascade("none"); //prop.setPropertyAccessorName("property"); interferisce con il generator pi sotto prop.setPersistentClass(clazz); component.addProperty(prop); //Generator not supported for embedded map identifier //See https://forum.hibernate.org/viewtopic.php?t=945273 //See Component.buildIdentifierGenerator() /*String columnName = column.getColumnName(); PrimaryKeyColumn pkCol = mdTable.getPrimaryKey().findPrimaryKeyColumnByName(columnName); if(pkCol == null) { logger.error("Column without corresponding PrimaryKeyColumn: {}", columnName); hasErrors = true; continue; } Generator generator = pkCol.getGenerator(); setPKColumnGenerator(mappings, clazz, tab, column, value, generator);*/ } } if (hasErrors) { // TODO PAOLO: se la PK non e' buona, tutta la tabella dovrebbe saltare logger.error("Skipping primary key"); return; } tab.setIdentifierValue(component); clazz.setIdentifier(component); clazz.setDiscriminatorValue(name); tab.setPrimaryKey(primaryKey); }
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 ww w . java 2s . 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:com.manydesigns.portofino.persistence.hibernate.HibernateConfig.java
License:Open Source License
protected void createM2O(Configuration config, Mappings mappings, ForeignKey relationship) { com.manydesigns.portofino.model.database.Table manyMDTable = relationship.getFromTable(); com.manydesigns.portofino.model.database.Table oneMDTable = relationship.getToTable(); String manyMDQualifiedTableName = manyMDTable.getActualEntityName(); String oneMDQualifiedTableName = oneMDTable.getActualEntityName(); RootClass clazz = (RootClass) mappings.getClass(manyMDQualifiedTableName); if (clazz == null) { logger.error("Cannot find table '{}' as 'many' side of foreign key '{}'. Skipping relationship.", manyMDQualifiedTableName, relationship.getName()); return;// w w w . ja va 2s.c om } Table tab = clazz.getTable(); List<String> columnNames = new ArrayList<String>(); for (Reference ref : relationship.getReferences()) { if (ref.getActualFromColumn() == null) { logger.error("Missing from column {}, skipping relationship", ref.getFromColumn()); return; } columnNames.add(ref.getFromColumn()); } ManyToOne m2o = new ManyToOne(mappings, tab); m2o.setLazy(LAZY); final HashMap<String, PersistentClass> persistentClasses = new HashMap<String, PersistentClass>(); persistentClasses.put(oneMDQualifiedTableName, config.getClassMapping(oneMDQualifiedTableName)); m2o.setReferencedEntityName(oneMDQualifiedTableName); m2o.createPropertyRefConstraints(persistentClasses); PersistentClass manyClass = config.getClassMapping(manyMDQualifiedTableName); for (String columnName : columnNames) { Column col = new Column(); col.setName(escapeName(columnName)); //Recupero la colonna precedentemente associata alla tabella: //essa ha uno uniqueIdentifier generato al momento dell'associazione alla tabella; //questo viene utilizzato per disambiguare l'alias della colonna nelle query //SQL generate da Hibernate. col = manyClass.getTable().getColumn(col); if (col == null) { logger.error("Column not found in 'many' entity {}: {}, " + "skipping relationship", manyClass.getEntityName(), columnName); return; } m2o.addColumn(col); } Property prop = new Property(); prop.setName(relationship.getActualOnePropertyName()); //prop.setNodeName(relationship.getActualOnePropertyName()); prop.setValue(m2o); prop.setCascade("none"); //TODO era "all", capire prop.setInsertable(false); prop.setUpdateable(false); clazz.addProperty(prop); }
From source file:org.codehaus.groovy.grails.orm.hibernate.cfg.AbstractGrailsDomainBinder.java
License:Apache License
protected void setCascadeBehaviour(GrailsDomainClassProperty grailsProperty, Property prop) { String cascadeStrategy = "none"; // set to cascade all for the moment GrailsDomainClass domainClass = grailsProperty.getDomainClass(); PropertyConfig config = getPropertyConfig(grailsProperty); GrailsDomainClass referenced = grailsProperty.getReferencedDomainClass(); if (config != null && config.getCascade() != null) { cascadeStrategy = config.getCascade(); } else if (grailsProperty.isAssociation()) { if (grailsProperty.isHasOne()) { cascadeStrategy = CASCADE_ALL; } else if (grailsProperty.isOneToOne()) { if (referenced != null && referenced.isOwningClass(domainClass.getClazz())) { cascadeStrategy = CASCADE_ALL; }/*from w ww . j a va 2s. com*/ } else if (grailsProperty.isOneToMany()) { if (referenced != null && referenced.isOwningClass(domainClass.getClazz())) { cascadeStrategy = CASCADE_ALL; } else { cascadeStrategy = CASCADE_SAVE_UPDATE; } } else if (grailsProperty.isManyToMany()) { if ((referenced != null && referenced.isOwningClass(domainClass.getClazz())) || grailsProperty.isCircular()) { cascadeStrategy = CASCADE_SAVE_UPDATE; } } else if (grailsProperty.isManyToOne()) { if (referenced != null && referenced.isOwningClass(domainClass.getClazz()) && !isCircularAssociation(grailsProperty)) { cascadeStrategy = CASCADE_ALL; } else { cascadeStrategy = CASCADE_NONE; } } } else if (grailsProperty.isBasicCollectionType()) { cascadeStrategy = CASCADE_ALL; } else if (Map.class.isAssignableFrom(grailsProperty.getType())) { referenced = grailsProperty.getReferencedDomainClass(); if (referenced != null && referenced.isOwningClass(grailsProperty.getDomainClass().getClazz())) { cascadeStrategy = CASCADE_ALL; } else { cascadeStrategy = CASCADE_SAVE_UPDATE; } } logCascadeMapping(grailsProperty, cascadeStrategy, referenced); prop.setCascade(cascadeStrategy); }
From source file:org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsDomainBinder.java
License:Apache License
private static void setCascadeBehaviour(GrailsDomainClassProperty grailsProperty, Property prop) { String cascadeStrategy = "none"; // set to cascade all for the moment GrailsDomainClass domainClass = grailsProperty.getDomainClass(); PropertyConfig config = getPropertyConfig(grailsProperty); GrailsDomainClass referenced = grailsProperty.getReferencedDomainClass(); if (config != null && config.getCascade() != null) { cascadeStrategy = config.getCascade(); } else if (grailsProperty.isAssociation()) { if (grailsProperty.isHasOne()) { cascadeStrategy = CASCADE_ALL; } else if (grailsProperty.isOneToOne()) { if (referenced != null && referenced.isOwningClass(domainClass.getClazz())) { cascadeStrategy = CASCADE_ALL; }/*from w ww . j av a2 s .c o m*/ } else if (grailsProperty.isOneToMany()) { if (referenced != null && referenced.isOwningClass(domainClass.getClazz())) { cascadeStrategy = CASCADE_ALL; } else { cascadeStrategy = CASCADE_SAVE_UPDATE; } } else if (grailsProperty.isManyToMany()) { if ((referenced != null && referenced.isOwningClass(domainClass.getClazz())) || grailsProperty.isCircular()) { cascadeStrategy = CASCADE_SAVE_UPDATE; } } else if (grailsProperty.isManyToOne()) { if (referenced != null && referenced.isOwningClass(domainClass.getClazz()) && !isCircularAssociation(grailsProperty)) { cascadeStrategy = CASCADE_ALL; } else { cascadeStrategy = CASCADE_NONE; } } } else if (grailsProperty.isBasicCollectionType()) { cascadeStrategy = CASCADE_ALL; } else if (Map.class.isAssignableFrom(grailsProperty.getType())) { referenced = grailsProperty.getReferencedDomainClass(); if (referenced != null && referenced.isOwningClass(grailsProperty.getDomainClass().getClazz())) { cascadeStrategy = CASCADE_ALL; } else { cascadeStrategy = CASCADE_SAVE_UPDATE; } } logCascadeMapping(grailsProperty, cascadeStrategy, referenced); prop.setCascade(cascadeStrategy); }
From source file:org.grails.orm.hibernate.cfg.AbstractGrailsDomainBinder.java
License:Apache License
protected void setCascadeBehaviour(PersistentProperty grailsProperty, Property prop) { String cascadeStrategy = "none"; // set to cascade all for the moment PersistentEntity domainClass = grailsProperty.getOwner(); PropertyConfig config = getPropertyConfig(grailsProperty); if (config != null && config.getCascade() != null) { cascadeStrategy = config.getCascade(); } else if (grailsProperty instanceof Association) { Association association = (Association) grailsProperty; PersistentEntity referenced = association.getAssociatedEntity(); if (isHasOne(association)) { cascadeStrategy = CASCADE_ALL; } else if (association instanceof org.grails.datastore.mapping.model.types.OneToOne) { if (referenced != null && association.isOwningSide()) { cascadeStrategy = CASCADE_ALL; } else { cascadeStrategy = CASCADE_SAVE_UPDATE; }// ww w .jav a2s. c o m } else if (association instanceof org.grails.datastore.mapping.model.types.OneToMany) { if (referenced != null && association.isOwningSide()) { cascadeStrategy = CASCADE_ALL; } else { cascadeStrategy = CASCADE_SAVE_UPDATE; } } else if (grailsProperty instanceof ManyToMany) { if ((referenced != null && referenced.isOwningEntity(domainClass)) || association.isCircular()) { cascadeStrategy = CASCADE_SAVE_UPDATE; } } else if (grailsProperty instanceof org.grails.datastore.mapping.model.types.ManyToOne) { if (referenced != null && referenced.isOwningEntity(domainClass) && !isCircularAssociation(grailsProperty)) { cascadeStrategy = CASCADE_ALL; } else if (isCompositeIdProperty((Mapping) domainClass.getMapping().getMappedForm(), grailsProperty)) { cascadeStrategy = CASCADE_ALL; } else { cascadeStrategy = CASCADE_NONE; } } else if (grailsProperty instanceof Basic) { cascadeStrategy = CASCADE_ALL; } else if (Map.class.isAssignableFrom(grailsProperty.getType())) { referenced = association.getAssociatedEntity(); if (referenced != null && referenced.isOwningEntity(domainClass)) { cascadeStrategy = CASCADE_ALL; } else { cascadeStrategy = CASCADE_SAVE_UPDATE; } } logCascadeMapping(association, cascadeStrategy, referenced); } prop.setCascade(cascadeStrategy); }