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 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.procedure.ProcedureCall;
|
||||||
import org.hibernate.query.QueryProducer;
|
import org.hibernate.query.QueryProducer;
|
||||||
|
|
||||||
@ -139,4 +144,23 @@ public interface SharedSessionContract extends QueryProducer, Serializable {
|
|||||||
* @see org.hibernate.boot.SessionFactoryBuilder#applyJdbcBatchSize
|
* @see org.hibernate.boot.SessionFactoryBuilder#applyJdbcBatchSize
|
||||||
*/
|
*/
|
||||||
void setJdbcBatchSize(Integer jdbcBatchSize);
|
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 java.util.UUID;
|
||||||
import javax.persistence.FlushModeType;
|
import javax.persistence.FlushModeType;
|
||||||
import javax.persistence.TransactionRequiredException;
|
import javax.persistence.TransactionRequiredException;
|
||||||
import javax.persistence.Tuple;
|
import javax.persistence.criteria.CriteriaBuilder;
|
||||||
import javax.persistence.criteria.CriteriaDelete;
|
import javax.persistence.criteria.CriteriaDelete;
|
||||||
import javax.persistence.criteria.CriteriaQuery;
|
import javax.persistence.criteria.CriteriaQuery;
|
||||||
import javax.persistence.criteria.CriteriaUpdate;
|
import javax.persistence.criteria.CriteriaUpdate;
|
||||||
import javax.persistence.criteria.Selection;
|
|
||||||
|
|
||||||
import org.hibernate.CacheMode;
|
import org.hibernate.CacheMode;
|
||||||
import org.hibernate.EmptyInterceptor;
|
import org.hibernate.EmptyInterceptor;
|
||||||
@ -56,7 +55,6 @@
|
|||||||
import org.hibernate.engine.transaction.internal.TransactionImpl;
|
import org.hibernate.engine.transaction.internal.TransactionImpl;
|
||||||
import org.hibernate.engine.transaction.spi.TransactionImplementor;
|
import org.hibernate.engine.transaction.spi.TransactionImplementor;
|
||||||
import org.hibernate.id.uuid.StandardRandomStrategy;
|
import org.hibernate.id.uuid.StandardRandomStrategy;
|
||||||
import org.hibernate.internal.util.StringHelper;
|
|
||||||
import org.hibernate.jpa.internal.util.FlushModeTypeHelper;
|
import org.hibernate.jpa.internal.util.FlushModeTypeHelper;
|
||||||
import org.hibernate.jpa.spi.NativeQueryTupleTransformer;
|
import org.hibernate.jpa.spi.NativeQueryTupleTransformer;
|
||||||
import org.hibernate.jpa.spi.TupleBuilderTransformer;
|
import org.hibernate.jpa.spi.TupleBuilderTransformer;
|
||||||
@ -73,9 +71,10 @@
|
|||||||
import org.hibernate.query.sql.internal.NativeQueryImpl;
|
import org.hibernate.query.sql.internal.NativeQueryImpl;
|
||||||
import org.hibernate.query.sql.spi.NamedNativeQueryMemento;
|
import org.hibernate.query.sql.spi.NamedNativeQueryMemento;
|
||||||
import org.hibernate.query.sql.spi.NativeQueryImplementor;
|
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.internal.QuerySqmImpl;
|
||||||
import org.hibernate.query.sqm.tree.SqmStatement;
|
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.JdbcSessionContext;
|
||||||
import org.hibernate.resource.jdbc.spi.StatementInspector;
|
import org.hibernate.resource.jdbc.spi.StatementInspector;
|
||||||
import org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorImpl;
|
import org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorImpl;
|
||||||
@ -862,6 +861,62 @@ public void setJdbcBatchSize(Integer jdbcBatchSize) {
|
|||||||
this.jdbcBatchSize = 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")
|
@SuppressWarnings("unused")
|
||||||
private void writeObject(ObjectOutputStream oos) throws IOException {
|
private void writeObject(ObjectOutputStream oos) throws IOException {
|
||||||
if ( log.isTraceEnabled() ) {
|
if ( log.isTraceEnabled() ) {
|
||||||
|
@ -3104,56 +3104,6 @@ public Map<String, Object> getProperties() {
|
|||||||
return Collections.unmodifiableMap( properties );
|
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
|
@Override
|
||||||
public StoredProcedureQuery createNamedStoredProcedureQuery(String name) {
|
public StoredProcedureQuery createNamedStoredProcedureQuery(String name) {
|
||||||
checkOpen();
|
checkOpen();
|
||||||
@ -3271,12 +3221,6 @@ public SessionFactoryImplementor getEntityManagerFactory() {
|
|||||||
return getFactory();
|
return getFactory();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public CriteriaBuilder getCriteriaBuilder() {
|
|
||||||
checkOpen();
|
|
||||||
return getFactory().getCriteriaBuilder();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MetamodelImplementor getMetamodel() {
|
public MetamodelImplementor getMetamodel() {
|
||||||
checkOpen();
|
checkOpen();
|
||||||
|
@ -8,6 +8,9 @@
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
import javax.persistence.criteria.CriteriaBuilder;
|
||||||
|
import javax.persistence.criteria.CriteriaQuery;
|
||||||
|
|
||||||
import org.hibernate.ScrollMode;
|
import org.hibernate.ScrollMode;
|
||||||
import org.hibernate.ScrollableResults;
|
import org.hibernate.ScrollableResults;
|
||||||
import org.hibernate.StatelessSession;
|
import org.hibernate.StatelessSession;
|
||||||
@ -30,7 +33,8 @@ public String[] getMappings() {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCreateUpdateReadDelete() {
|
public void testCreateUpdateReadDelete() {
|
||||||
StatelessSession ss = sessionFactory().openStatelessSession();
|
try (StatelessSession ss = sessionFactory().openStatelessSession()) {
|
||||||
|
try {
|
||||||
Transaction tx = ss.beginTransaction();
|
Transaction tx = ss.beginTransaction();
|
||||||
Document doc = new Document( "blah blah blah", "Blahs" );
|
Document doc = new Document( "blah blah blah", "Blahs" );
|
||||||
ss.insert( doc );
|
ss.insert( doc );
|
||||||
@ -74,11 +78,17 @@ public void testCreateUpdateReadDelete() {
|
|||||||
assertEquals( doc.getText(), doc2.getText() );
|
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( "Blahs", doc2.getName() );
|
||||||
assertEquals( doc.getText(), doc2.getText() );
|
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();
|
sr.next();
|
||||||
doc2 = (Document) sr.get();
|
doc2 = (Document) sr.get();
|
||||||
sr.close();
|
sr.close();
|
||||||
@ -88,7 +98,14 @@ public void testCreateUpdateReadDelete() {
|
|||||||
tx = ss.beginTransaction();
|
tx = ss.beginTransaction();
|
||||||
ss.delete( doc );
|
ss.delete( doc );
|
||||||
tx.commit();
|
tx.commit();
|
||||||
ss.close();
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
if ( ss.getTransaction().isActive() ) {
|
||||||
|
ss.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
Loading…
x
Reference in New Issue
Block a user