Class QObjectMapping<S extends ObjectType,Q extends QObject<R>,R extends MObject>
- java.lang.Object
-
- com.evolveum.midpoint.repo.sqlbase.mapping.QueryModelMapping<S,Q,R>
-
- com.evolveum.midpoint.repo.sqlbase.mapping.QueryTableMapping<S,Q,R>
-
- com.evolveum.midpoint.repo.sqale.mapping.SqaleTableMapping<S,Q,R>
-
- com.evolveum.midpoint.repo.sqale.qmodel.object.QObjectMapping<S,Q,R>
-
- Type Parameters:
S- schema type of the objectQ- type of entity pathR- row type related to theQObjectMapping
- All Implemented Interfaces:
SqaleMappingMixin<S,Q,R>
- Direct Known Subclasses:
QAssignmentHolderMapping,QShadowMapping
public class QObjectMapping<S extends ObjectType,Q extends QObject<R>,R extends MObject> extends SqaleTableMapping<S,Q,R>
Mapping betweenQObjectandObjectType.
-
-
Field Summary
Fields Modifier and Type Field Description static StringDEFAULT_ALIAS_NAME-
Fields inherited from class com.evolveum.midpoint.repo.sqlbase.mapping.QueryModelMapping
logger
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedQObjectMapping(@NotNull String tableName, @NotNull String defaultAliasName, @NotNull Class<S> schemaType, @NotNull Class<Q> queryType, @NotNull SqaleRepoContext repositoryContext)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static QObjectMapping<?,?,?>getObjectMapping()static QObjectMapping<?,?,?>initObjectMapping(@NotNull SqaleRepoContext repositoryContext)protected QnewAliasInstance(String alias)Method returning new instance ofEntityPath- to be implemented by sub-mapping.RnewRowObject()@NotNull com.querydsl.core.types.Path<?>[]selectExpressions(Q entity, Collection<SelectorOptions<GetOperationOptions>> options)By default, usesQueryTableMapping.selectExpressionsWithCustomColumns(Q)and does not use options.voidsetFullObject(R row, S schemaObject)Serializes schema object and setsMObject.fullObject.voidstoreRelatedEntities(R row, S schemaObject, @NotNull JdbcSession jdbcSession)Stores other entities related to the main object row like containers, references, etc.RtoRowObjectWithoutFullObject(S schemaObject, JdbcSession jdbcSession)Override this to fill additional row attributes after calling this super version.StoSchemaObject(@NotNull com.querydsl.core.Tuple row, Q entityPath, @NotNull JdbcSession jdbcSession, Collection<SelectorOptions<GetOperationOptions>> options)Transforms row Tuple containingSqaleTableMappingunder entity path and extension columns.StoSchemaObjectCompleteSafe(com.querydsl.core.Tuple tuple, Q entityPath, Collection<SelectorOptions<GetOperationOptions>> options, @NotNull JdbcSession jdbcSession, boolean forceFull)The same function as in overridden method, but softer exception handling.-
Methods inherited from class com.evolveum.midpoint.repo.sqale.mapping.SqaleTableMapping
addExtensionMapping, binaryMapper, booleanMapper, createFullObject, createRowTransformer, enumMapper, fullObjectItemsToSkip, insert, integerMapper, multiPolyStringMapper, multiStringMapper, multiUriMapper, multiValueMapper, needsInitialization, objectReference, objectReference, objectTypeToQName, parseSchemaObject, parseSchemaObject, polyStringMapper, processCacheableRelation, processCacheableUri, processCacheableUri, processCacheableUris, processExtensionColumns, processExtensions, repositoryContext, resolveIdToUri, resolveReferenceNames, resolveUriIdToQName, schemaTypeToObjectType, setPolyString, setReference, storeRefs, stringMapper, stringsToArray, timestampMapper, toSchemaObject, toSchemaObjectComplete, toSchemaObjectInternal, uriMapper, uuidMapper
-
Methods inherited from class com.evolveum.midpoint.repo.sqlbase.mapping.QueryTableMapping
addDetailFetchMapper, addExtensionColumn, defaultAlias, defaultAliasName, detailFetchMappers, getExtensionColumns, joinOn, longMapper, newAlias, prismContext, selectExpressionsWithCustomColumns, tableName, toString, updateGetOptions
-
Methods inherited from class com.evolveum.midpoint.repo.sqlbase.mapping.QueryModelMapping
addItemMapping, addRelationResolver, getItemMapper, getItemMappings, getRelationResolver, itemDefinition, itemMapper, queryType, relationResolver, schemaType
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface com.evolveum.midpoint.repo.sqale.mapping.SqaleMappingMixin
addAuditRefMapping, addContainerTableMapping, addExtensionMapping, addItemMapping, addNestedMapping, addRefMapping, addRefMapping, addRelationResolver, afterModify, queryType
-
-
-
-
Field Detail
-
DEFAULT_ALIAS_NAME
public static final String DEFAULT_ALIAS_NAME
- See Also:
- Constant Field Values
-
-
Method Detail
-
initObjectMapping
public static QObjectMapping<?,?,?> initObjectMapping(@NotNull @NotNull SqaleRepoContext repositoryContext)
-
getObjectMapping
public static QObjectMapping<?,?,?> getObjectMapping()
-
selectExpressions
@NotNull public @NotNull com.querydsl.core.types.Path<?>[] selectExpressions(Q entity, Collection<SelectorOptions<GetOperationOptions>> options)
Description copied from class:QueryTableMappingBy default, usesQueryTableMapping.selectExpressionsWithCustomColumns(Q)and does not use options. Can be overridden to fulfil other needs, e.g. to select just full object.- Overrides:
selectExpressionsin classQueryTableMapping<S extends ObjectType,Q extends QObject<R>,R extends MObject>
-
newAliasInstance
protected Q newAliasInstance(String alias)
Description copied from class:QueryTableMappingMethod returning new instance ofEntityPath- to be implemented by sub-mapping. This will create entity path without any extension columns, seeQueryTableMapping.newAlias(java.lang.String)for that.- Specified by:
newAliasInstancein classQueryTableMapping<S extends ObjectType,Q extends QObject<R>,R extends MObject>
-
newRowObject
public R newRowObject()
- Overrides:
newRowObjectin classQueryTableMapping<S extends ObjectType,Q extends QObject<R>,R extends MObject>
-
toSchemaObject
public S toSchemaObject(@NotNull @NotNull com.querydsl.core.Tuple row, @NotNull Q entityPath, @NotNull @NotNull JdbcSession jdbcSession, Collection<SelectorOptions<GetOperationOptions>> options) throws SchemaException
Description copied from class:SqaleTableMappingTransforms row Tuple containingSqaleTableMappingunder entity path and extension columns. While public, for Sqale repo it should only be called for internal mapping purposes. *Do not call this in result list transformers* because the results would not have resolved reference names (if requested). Notice that the default implementation ofSqaleTableMapping.createRowTransformer(com.evolveum.midpoint.repo.sqlbase.SqlQueryContext<S, Q, R>, com.evolveum.midpoint.repo.sqlbase.JdbcSession)in this class callsSqaleTableMapping.toSchemaObjectCompleteSafe(com.querydsl.core.Tuple, Q, java.util.Collection<com.evolveum.midpoint.schema.SelectorOptions<com.evolveum.midpoint.schema.GetOperationOptions>>, com.evolveum.midpoint.repo.sqlbase.JdbcSession, boolean)which is the right thing to call in result list transformers.- Overrides:
toSchemaObjectin classSqaleTableMapping<S extends ObjectType,Q extends QObject<R>,R extends MObject>- Throws:
SchemaException
-
toSchemaObjectCompleteSafe
public S toSchemaObjectCompleteSafe(com.querydsl.core.Tuple tuple, Q entityPath, Collection<SelectorOptions<GetOperationOptions>> options, @NotNull @NotNull JdbcSession jdbcSession, boolean forceFull)
The same function as in overridden method, but softer exception handling. This targets cases likeRepositoryService.searchObjects(java.lang.Class<T>, com.evolveum.midpoint.prism.query.ObjectQuery, java.util.Collection<com.evolveum.midpoint.schema.SelectorOptions<com.evolveum.midpoint.schema.GetOperationOptions>>, com.evolveum.midpoint.schema.result.OperationResult)where single wrong object should not spoil the whole result list.- Overrides:
toSchemaObjectCompleteSafein classSqaleTableMapping<S extends ObjectType,Q extends QObject<R>,R extends MObject>
-
toRowObjectWithoutFullObject
@NotNull public R toRowObjectWithoutFullObject(S schemaObject, JdbcSession jdbcSession)
Override this to fill additional row attributes after calling this super version. *This must be called with active JDBC session* so it can create newQUrirows. As this is intended for inserts *DO NOT* setMObject.objectTypeto any value, it must be NULL otherwise the DB will complain about the value for the generated column. OID may be null, hence the method does NOT create any sub-entities, seestoreRelatedEntities(MObject, ObjectType, JdbcSession). Try to keep order of fields here, in M-class (MObject for this one) and in SQL the same.
-
storeRelatedEntities
public void storeRelatedEntities(@NotNull R row, @NotNull S schemaObject, @NotNull @NotNull JdbcSession jdbcSession) throws SchemaExceptionStores other entities related to the main object row like containers, references, etc. This is not part oftoRowObjectWithoutFullObject(S, com.evolveum.midpoint.repo.sqlbase.JdbcSession)because it requires known OID which is not assured before calling that method. *Always call this super method first in overriding methods.*- Parameters:
row- master row for the added object("aggregate root")schemaObject- schema objects for which the details are storedjdbcSession- JDBC session used to insert related rows- Throws:
SchemaException
-
setFullObject
public void setFullObject(R row, S schemaObject) throws SchemaException
Serializes schema object and setsMObject.fullObject.- Throws:
SchemaException
-
-