public void loadEagerJoin(OpenJPAStateManager sm, JDBCStore store, JDBCFetchConfiguration fetch, Result res) throws SQLException { ClassMapping cls = field.getIndependentTypeMappings()[0]; sm.storeObject(field.getIndex(), res.load(cls, store, fetch, eagerJoin(res.newJoins(), cls, false))); }
public Object getJoinValue(OpenJPAStateManager sm, Column col, JDBCStore store) { return getJoinValue(sm.fetch(field.getIndex()), col, store); }
public void appendIsNotNull(SQLBuffer sql, Select sel, Joins joins) { // if no inverse, just join to mapping's table (usually a no-op // because it'll be in the primary table) and see if fk cols aren't // null; if inverse, then we have to do a sub-select to see if any // inverse objects point back to this field's owner if (field.getJoinDirection() != field.JOIN_INVERSE) { //### probably need some sort of subselect here on fk constants joins = join(joins, false); Column[] cols = field.getColumns(); if (cols.length == 0) sql.append("1 = 1"); else sql.append(sel.getColumnAlias(cols[0], joins)). append(" IS NOT ").appendValue(null, cols[0]); } else testInverseNull(sql, sel, joins, false); }
public void update(OpenJPAStateManager sm, JDBCStore store, RowManager rm) throws SQLException { if (field.getMappedBy() != null) return; OpenJPAStateManager rel = RelationStrategies.getStateManager (sm.fetchObjectField(field.getIndex()), store.getContext()); if (field.getJoinDirection() == field.JOIN_INVERSE) { nullInverse(sm, rm); updateInverse(sm, rel, store, rm); } else { Row row = field.getRow(sm, store, rm, Row.ACTION_UPDATE); if (row != null) field.setForeignKey(row, rel); } }
/** * Add the joins needed to select/load eager data. */ private Joins eagerJoin(Joins joins, ClassMapping cls, boolean forceInner) { boolean inverse = field.getJoinDirection() == field.JOIN_INVERSE; if (!inverse) { joins = join(joins, false); joins = setEmbeddedVariable(joins); } // and join into relation ForeignKey fk = field.getForeignKey(cls); if (!forceInner && field.getNullValue() != FieldMapping.NULL_EXCEPTION) return joins.outerJoinRelation(field.getName(), fk, field. getTypeMapping(), field.getSelectSubclasses(), inverse, false); return joins.joinRelation(field.getName(), fk, field.getTypeMapping(), field.getSelectSubclasses(), inverse, false); }
OpenJPAStateManager rel = RelationStrategies.getStateManager(sm. fetchObjectField(field.getIndex()), store.getContext()); updateInverse(sm, rel, store, rm); } else nullInverse(sm, rm); } else { field.deleteRow(sm, store, rm); setMapKey(sm, rel, store, row);
public Object getPrimaryKeyValue(Result res, Column[] cols, ForeignKey fk, JDBCStore store, Joins joins) throws SQLException { ClassMapping relmapping = field.getTypeMapping(); if (relmapping.getIdentityType() == ClassMapping.ID_DATASTORE) { Column col = cols[0]; if (fk != null) col = fk.getColumn(col); long id = res.getLong(col, joins); if (field.getObjectIdFieldTypeCode() == JavaTypes.LONG) return id; return store.newDataStoreId(id, relmapping, field.getPolymorphic() != ValueMapping.POLY_FALSE); } if (relmapping.isOpenJPAIdentity()) return ((Joinable) relmapping.getPrimaryKeyFieldMappings()[0]. getStrategy()).getPrimaryKeyValue(res, cols, fk, store, joins); if (cols == getColumns() && fk == null) fk = field.getForeignKey(); else fk = createTranslatingForeignKey(relmapping, cols, fk); return relmapping.getObjectId(store, res, fk, field.getPolymorphic() != ValueMapping.POLY_FALSE, joins); }
field.setColumns(mapped.getDefiningMapping(). getPrimaryKeyColumns()); } else if (isTypeUnjoinedSubclass(mapped)) throw new MetaDataException(_loc.get ("mapped-inverse-unjoined", field.getName(), (field.getDefiningMapping())); } else if (mapped.getElement().getTypeCode() == JavaTypes.PC) { if (isTypeUnjoinedSubclass(mapped.getElementMapping())) throw new MetaDataException(_loc.get ("mapped-inverse-unjoined", field.getName(), if (field.getTypeMapping().isMapped()) { if (field.getMappedByIdValue() != null) setMappedByIdColumns();
field1.setForeignKey(fk); addConstraints(field1); field1.setStrategy(new RelationFieldStrategy(), null); if (_custom != null) _custom.customize(field1); field2.setForeignKey(fk); field2.setJoinDirection(field2.JOIN_INVERSE); field2.setStrategy(new RelationFieldStrategy(), null); } else { ValueMapping vm = field2.getElementMapping();
field.getPolymorphic() != ValueMapping.POLY_FALSE); else { Object[] pks = (getColumns().length == 1) ? new Object[]{ val } : (Object[]) val; boolean nulls = true;
public Object loadEagerParallel(OpenJPAStateManager sm, JDBCStore store, JDBCFetchConfiguration fetch, Object res) throws SQLException { // process batched results if we haven't already Map rels; if (res instanceof Result) rels = processEagerParallelResult(sm, store, fetch, (Result) res); else rels = (Map) res; // store object for this oid in instance sm.storeObject(field.getIndex(), rels.remove(sm.getObjectId())); return rels; }
public void selectEagerParallel(SelectExecutor sel, final OpenJPAStateManager sm, final JDBCStore store, final JDBCFetchConfiguration fetch, final int eagerMode) { final ClassMapping[] clss = field.getIndependentTypeMappings(); if (!(sel instanceof Union)) selectEagerParallel((Select) sel, clss[0], store, fetch, eagerMode); else { Union union = (Union) sel; if (fetch.getSubclassFetchMode (field.getTypeMapping()) != JDBCFetchConfiguration.EAGER_JOIN) union.abortUnion(); union.select(new Union.Selector() { public void select(Select sel, int idx) { selectEagerParallel(sel, clss[idx], store, fetch, eagerMode); } }); } }
field.setColumns(mapped.getDefiningMapping(). getPrimaryKeyColumns()); } else if (isTypeUnjoinedSubclass(mapped)) throw new MetaDataException(_loc.get ("mapped-inverse-unjoined", field.getName(), (field.getDefiningMapping())); } else if (mapped.getElement().getTypeCode() == JavaTypes.PC) { if (isTypeUnjoinedSubclass(mapped.getElementMapping())) throw new MetaDataException(_loc.get ("mapped-inverse-unjoined", field.getName(),
OpenJPAStateManager rel = RelationStrategies.getStateManager(sm. fetchObjectField(field.getIndex()), store.getContext()); updateInverse(sm, rel, store, rm); } else nullInverse(sm, rm); } else { field.deleteRow(sm, store, rm); setMapKey(sm, rel, store, row);
public Object getPrimaryKeyValue(Result res, Column[] cols, ForeignKey fk, JDBCStore store, Joins joins) throws SQLException { ClassMapping relmapping = field.getTypeMapping(); if (relmapping.getIdentityType() == ClassMapping.ID_DATASTORE) { Column col = cols[0]; if (fk != null) col = fk.getColumn(col); long id = res.getLong(col, joins); if (field.getObjectIdFieldTypeCode() == JavaTypes.LONG) return id; return store.newDataStoreId(id, relmapping, field.getPolymorphic() != ValueMapping.POLY_FALSE); } if (relmapping.isOpenJPAIdentity()) return ((Joinable) relmapping.getPrimaryKeyFieldMappings()[0]. getStrategy()).getPrimaryKeyValue(res, cols, fk, store, joins); if (cols == getColumns() && fk == null) fk = field.getForeignKey(); else fk = createTranslatingForeignKey(relmapping, cols, fk); return relmapping.getObjectId(store, res, fk, field.getPolymorphic() != ValueMapping.POLY_FALSE, joins); }
/** * Add the joins needed to select/load eager data. */ private Joins eagerJoin(Joins joins, ClassMapping cls, boolean forceInner) { boolean inverse = field.getJoinDirection() == field.JOIN_INVERSE; if (!inverse) { joins = join(joins, false); joins = setEmbeddedVariable(joins); } // and join into relation ForeignKey fk = field.getForeignKey(cls); if (!forceInner && field.getNullValue() != FieldMapping.NULL_EXCEPTION) return joins.outerJoinRelation(field.getName(), fk, field. getTypeMapping(), field.getSelectSubclasses(), inverse, false); return joins.joinRelation(field.getName(), fk, field.getTypeMapping(), field.getSelectSubclasses(), inverse, false); }
field.setColumns(mapped.getDefiningMapping(). getPrimaryKeyColumns()); } else if (isTypeUnjoinedSubclass(mapped)) throw new MetaDataException(_loc.get ("mapped-inverse-unjoined", field.getName(), (field.getDefiningMapping())); } else if (mapped.getElement().getTypeCode() == JavaTypes.PC) { if (isTypeUnjoinedSubclass(mapped.getElementMapping())) throw new MetaDataException(_loc.get ("mapped-inverse-unjoined", field.getName(), if (field.getTypeMapping().isMapped()) { if (field.getMappedByIdValue() != null) setMappedByIdColumns();
field1.setForeignKey(fk); addConstraints(field1); field1.setStrategy(new RelationFieldStrategy(), null); if (_custom != null) _custom.customize(field1); field2.setForeignKey(fk); field2.setJoinDirection(field2.JOIN_INVERSE); field2.setStrategy(new RelationFieldStrategy(), null); } else { ValueMapping vm = field2.getElementMapping();
field.getPolymorphic() != ValueMapping.POLY_FALSE); else { Object[] pks = (getColumns().length == 1) ? new Object[]{ val } : (Object[]) val; boolean nulls = true;
public void delete(OpenJPAStateManager sm, JDBCStore store, RowManager rm) throws SQLException { if (field.getMappedBy() != null) return; if (field.getJoinDirection() == field.JOIN_INVERSE) { if (sm.getLoaded().get(field.getIndex())) { OpenJPAStateManager rel = RelationStrategies.getStateManager(sm. fetchObjectField(field.getIndex()), store.getContext()); updateInverse(sm, rel, store, rm); } else nullInverse(sm, rm); } else { field.deleteRow(sm, store, rm); // if our foreign key has a delete action, we need to set the // related object so constraints can be evaluated OpenJPAStateManager rel = RelationStrategies.getStateManager (sm.fetchObjectField(field.getIndex()), store.getContext()); if (rel != null) { ForeignKey fk = field.getForeignKey((ClassMapping) rel.getMetaData()); if (fk.getDeleteAction() == ForeignKey.ACTION_RESTRICT) { Row row = field.getRow(sm, store, rm, Row.ACTION_DELETE); row.setForeignKey(fk, null, rel); } } } }