mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-03-04 08:49:22 +00:00
6 - SQM based on JPA type system
This commit is contained in:
parent
ec086cd299
commit
944e15ce12
@ -8,6 +8,11 @@
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.persistence.criteria.CriteriaBuilder;
|
||||
import javax.persistence.criteria.CriteriaDelete;
|
||||
import javax.persistence.criteria.CriteriaQuery;
|
||||
import javax.persistence.criteria.CriteriaUpdate;
|
||||
|
||||
import org.hibernate.procedure.ProcedureCall;
|
||||
import org.hibernate.query.QueryProducer;
|
||||
|
||||
@ -139,4 +144,23 @@ public interface SharedSessionContract extends QueryProducer, Serializable {
|
||||
* @see org.hibernate.boot.SessionFactoryBuilder#applyJdbcBatchSize
|
||||
*/
|
||||
void setJdbcBatchSize(Integer jdbcBatchSize);
|
||||
|
||||
/**
|
||||
* Return an instance of {@link CriteriaBuilder}
|
||||
*
|
||||
* @return an instance of CriteriaBuilder
|
||||
* @throws IllegalStateException if the StatelessSession has been closed
|
||||
*/
|
||||
CriteriaBuilder getCriteriaBuilder();
|
||||
|
||||
@Override
|
||||
<T> org.hibernate.query.Query<T> createQuery(String queryString, Class<T> resultType);
|
||||
|
||||
<T> org.hibernate.query.Query<T> createQuery(CriteriaQuery<T> criteriaQuery);
|
||||
|
||||
org.hibernate.query.Query createQuery(CriteriaUpdate updateQuery);
|
||||
|
||||
org.hibernate.query.Query createQuery(CriteriaDelete deleteQuery);
|
||||
|
||||
<T> org.hibernate.query.Query<T> createNamedQuery(String name, Class<T> resultType);
|
||||
}
|
||||
|
@ -16,11 +16,10 @@
|
||||
import java.util.UUID;
|
||||
import javax.persistence.FlushModeType;
|
||||
import javax.persistence.TransactionRequiredException;
|
||||
import javax.persistence.Tuple;
|
||||
import javax.persistence.criteria.CriteriaBuilder;
|
||||
import javax.persistence.criteria.CriteriaDelete;
|
||||
import javax.persistence.criteria.CriteriaQuery;
|
||||
import javax.persistence.criteria.CriteriaUpdate;
|
||||
import javax.persistence.criteria.Selection;
|
||||
|
||||
import org.hibernate.CacheMode;
|
||||
import org.hibernate.EmptyInterceptor;
|
||||
@ -56,7 +55,6 @@
|
||||
import org.hibernate.engine.transaction.internal.TransactionImpl;
|
||||
import org.hibernate.engine.transaction.spi.TransactionImplementor;
|
||||
import org.hibernate.id.uuid.StandardRandomStrategy;
|
||||
import org.hibernate.internal.util.StringHelper;
|
||||
import org.hibernate.jpa.internal.util.FlushModeTypeHelper;
|
||||
import org.hibernate.jpa.spi.NativeQueryTupleTransformer;
|
||||
import org.hibernate.jpa.spi.TupleBuilderTransformer;
|
||||
@ -73,9 +71,10 @@
|
||||
import org.hibernate.query.sql.internal.NativeQueryImpl;
|
||||
import org.hibernate.query.sql.spi.NamedNativeQueryMemento;
|
||||
import org.hibernate.query.sql.spi.NativeQueryImplementor;
|
||||
import org.hibernate.query.sql.spi.ResultSetMappingDescriptor;
|
||||
import org.hibernate.query.sqm.internal.QuerySqmImpl;
|
||||
import org.hibernate.query.sqm.tree.SqmStatement;
|
||||
import org.hibernate.query.sqm.tree.delete.SqmDeleteStatement;
|
||||
import org.hibernate.query.sqm.tree.update.SqmUpdateStatement;
|
||||
import org.hibernate.resource.jdbc.spi.JdbcSessionContext;
|
||||
import org.hibernate.resource.jdbc.spi.StatementInspector;
|
||||
import org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorImpl;
|
||||
@ -862,6 +861,62 @@ public void setJdbcBatchSize(Integer jdbcBatchSize) {
|
||||
this.jdbcBatchSize = jdbcBatchSize;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CriteriaBuilder getCriteriaBuilder() {
|
||||
checkOpen();
|
||||
return getFactory().getCriteriaBuilder();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> QueryImplementor<T> createQuery(CriteriaQuery<T> criteriaQuery) {
|
||||
checkOpen();
|
||||
|
||||
try {
|
||||
return new QuerySqmImpl<>(
|
||||
"<criteria>",
|
||||
(SqmStatement) criteriaQuery,
|
||||
criteriaQuery.getResultType(),
|
||||
this
|
||||
);
|
||||
}
|
||||
catch ( RuntimeException e ) {
|
||||
throw exceptionConverter.convert( e );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public QueryImplementor createQuery(CriteriaUpdate criteriaUpdate) {
|
||||
checkOpen();
|
||||
try {
|
||||
return new QuerySqmImpl<>(
|
||||
"<criteria>",
|
||||
(SqmUpdateStatement) criteriaUpdate,
|
||||
null,
|
||||
this
|
||||
);
|
||||
}
|
||||
catch ( RuntimeException e ) {
|
||||
throw exceptionConverter.convert( e );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public QueryImplementor createQuery(CriteriaDelete criteriaDelete) {
|
||||
checkOpen();
|
||||
try {
|
||||
return new QuerySqmImpl<>(
|
||||
"<criteria>",
|
||||
(SqmDeleteStatement) criteriaDelete,
|
||||
null,
|
||||
this
|
||||
);
|
||||
}
|
||||
catch ( RuntimeException e ) {
|
||||
throw exceptionConverter.convert( e );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private void writeObject(ObjectOutputStream oos) throws IOException {
|
||||
if ( log.isTraceEnabled() ) {
|
||||
|
@ -3104,56 +3104,6 @@ public Map<String, Object> getProperties() {
|
||||
return Collections.unmodifiableMap( properties );
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public <T> QueryImplementor<T> createQuery(CriteriaQuery<T> criteriaQuery) {
|
||||
checkOpen();
|
||||
|
||||
try {
|
||||
return new QuerySqmImpl<>(
|
||||
"<criteria>",
|
||||
(SqmStatement) criteriaQuery,
|
||||
criteriaQuery.getResultType(),
|
||||
this
|
||||
);
|
||||
}
|
||||
catch ( RuntimeException e ) {
|
||||
throw exceptionConverter.convert( e );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public QueryImplementor createQuery(CriteriaUpdate criteriaUpdate) {
|
||||
checkOpen();
|
||||
try {
|
||||
return new QuerySqmImpl<>(
|
||||
"<criteria>",
|
||||
(SqmUpdateStatement) criteriaUpdate,
|
||||
null,
|
||||
this
|
||||
);
|
||||
}
|
||||
catch ( RuntimeException e ) {
|
||||
throw exceptionConverter.convert( e );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public QueryImplementor createQuery(CriteriaDelete criteriaDelete) {
|
||||
checkOpen();
|
||||
try {
|
||||
return new QuerySqmImpl<>(
|
||||
"<criteria>",
|
||||
(SqmDeleteStatement) criteriaDelete,
|
||||
null,
|
||||
this
|
||||
);
|
||||
}
|
||||
catch ( RuntimeException e ) {
|
||||
throw exceptionConverter.convert( e );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public StoredProcedureQuery createNamedStoredProcedureQuery(String name) {
|
||||
checkOpen();
|
||||
@ -3271,12 +3221,6 @@ public SessionFactoryImplementor getEntityManagerFactory() {
|
||||
return getFactory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CriteriaBuilder getCriteriaBuilder() {
|
||||
checkOpen();
|
||||
return getFactory().getCriteriaBuilder();
|
||||
}
|
||||
|
||||
@Override
|
||||
public MetamodelImplementor getMetamodel() {
|
||||
checkOpen();
|
||||
|
@ -8,6 +8,9 @@
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import javax.persistence.criteria.CriteriaBuilder;
|
||||
import javax.persistence.criteria.CriteriaQuery;
|
||||
|
||||
import org.hibernate.ScrollMode;
|
||||
import org.hibernate.ScrollableResults;
|
||||
import org.hibernate.StatelessSession;
|
||||
@ -30,7 +33,8 @@ public String[] getMappings() {
|
||||
|
||||
@Test
|
||||
public void testCreateUpdateReadDelete() {
|
||||
StatelessSession ss = sessionFactory().openStatelessSession();
|
||||
try (StatelessSession ss = sessionFactory().openStatelessSession()) {
|
||||
try {
|
||||
Transaction tx = ss.beginTransaction();
|
||||
Document doc = new Document( "blah blah blah", "Blahs" );
|
||||
ss.insert( doc );
|
||||
@ -74,11 +78,17 @@ public void testCreateUpdateReadDelete() {
|
||||
assertEquals( doc.getText(), doc2.getText() );
|
||||
|
||||
|
||||
doc2 = (Document) ss.createCriteria(Document.class).uniqueResult();
|
||||
CriteriaBuilder criteriaBuilder = ss.getCriteriaBuilder();
|
||||
CriteriaQuery<Document> criteria = criteriaBuilder.createQuery( Document.class );
|
||||
criteria.from( Document.class );
|
||||
doc2 = ss.createQuery( criteria ).uniqueResult();
|
||||
assertEquals( "Blahs", doc2.getName() );
|
||||
assertEquals( doc.getText(), doc2.getText() );
|
||||
|
||||
sr = ss.createCriteria(Document.class).scroll(ScrollMode.FORWARD_ONLY);
|
||||
criteria = criteriaBuilder.createQuery( Document.class );
|
||||
criteria.from( Document.class );
|
||||
|
||||
sr = ss.createQuery( criteria ).scroll( ScrollMode.FORWARD_ONLY );
|
||||
sr.next();
|
||||
doc2 = (Document) sr.get();
|
||||
sr.close();
|
||||
@ -88,7 +98,14 @@ public void testCreateUpdateReadDelete() {
|
||||
tx = ss.beginTransaction();
|
||||
ss.delete( doc );
|
||||
tx.commit();
|
||||
ss.close();
|
||||
}
|
||||
catch (Exception e) {
|
||||
if ( ss.getTransaction().isActive() ) {
|
||||
ss.getTransaction().rollback();
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
|
Loading…
x
Reference in New Issue
Block a user