org.hibernate.hql.spi.id.cte.CteValuesListBulkIdStrategy Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hibernate-core Show documentation
Show all versions of hibernate-core Show documentation
The core O/RM functionality as provided by Hibernate
The newest version!
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or .
*/
package org.hibernate.hql.spi.id.cte;
import org.hibernate.boot.spi.MetadataImplementor;
import org.hibernate.boot.spi.SessionFactoryOptions;
import org.hibernate.engine.jdbc.connections.spi.JdbcConnectionAccess;
import org.hibernate.engine.jdbc.spi.JdbcServices;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.hql.internal.ast.HqlSqlWalker;
import org.hibernate.hql.spi.id.MultiTableBulkIdStrategy;
/**
* This bulk-id strategy uses a CTE with a VALUE list to hold the identifiers,
* which are later used by the update or delete statement:
*
*
* with HT_Person (id ) as (
* select
* id
* from (
* values
* (?),
* (?),
* (?)
* (?)
* ) as HT (id)
* )
* delete
* from
* Person
* where
* ( id ) in (
* select
* id
* from
* HT_Person
* )
*
*
* @author Evandro Pires da Silva
* @author Vlad Mihalcea
*/
public class CteValuesListBulkIdStrategy
implements MultiTableBulkIdStrategy {
public static final CteValuesListBulkIdStrategy INSTANCE = new CteValuesListBulkIdStrategy();
@Override
public void prepare(
JdbcServices jdbcServices,
JdbcConnectionAccess jdbcConnectionAccess,
MetadataImplementor metadataImplementor,
SessionFactoryOptions sessionFactoryOptions) {
// nothing to do
}
@Override
public void release(
JdbcServices jdbcServices,
JdbcConnectionAccess connectionAccess) {
// nothing to do
}
@Override
public UpdateHandler buildUpdateHandler(
SessionFactoryImplementor factory,
HqlSqlWalker walker) {
return new CteValuesListUpdateHandlerImpl( factory, walker );
}
@Override
public DeleteHandler buildDeleteHandler(
SessionFactoryImplementor factory,
HqlSqlWalker walker) {
return new CteValuesListDeleteHandlerImpl( factory, walker );
}
}