Browse Source

Polishing.

Add support for limit/offset and implement introspection methods to avoid throwing UnsupportedOperationException.

See #4103
pull/4108/head
Mark Paluch 2 months ago
parent
commit
dcf45d1bf4
No known key found for this signature in database
GPG Key ID: 55BC6374BAA9D973
  1. 26
      spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/aot/AotMetamodel.java

26
spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/aot/AotMetamodel.java

@ -17,6 +17,7 @@ package org.springframework.data.jpa.repository.aot;
import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory; import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.TemporalType;
import jakarta.persistence.metamodel.EmbeddableType; import jakarta.persistence.metamodel.EmbeddableType;
import jakarta.persistence.metamodel.EntityType; import jakarta.persistence.metamodel.EntityType;
import jakarta.persistence.metamodel.ManagedType; import jakarta.persistence.metamodel.ManagedType;
@ -33,12 +34,15 @@ import org.hibernate.cfg.JdbcSettings;
import org.hibernate.cfg.PersistenceSettings; import org.hibernate.cfg.PersistenceSettings;
import org.hibernate.cfg.QuerySettings; import org.hibernate.cfg.QuerySettings;
import org.hibernate.dialect.Dialect; import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.pagination.LimitHandler;
import org.hibernate.dialect.pagination.OffsetFetchLimitHandler;
import org.hibernate.dialect.sequence.ANSISequenceSupport; import org.hibernate.dialect.sequence.ANSISequenceSupport;
import org.hibernate.dialect.sequence.SequenceSupport; import org.hibernate.dialect.sequence.SequenceSupport;
import org.hibernate.engine.jdbc.connections.internal.UserSuppliedConnectionProviderImpl; import org.hibernate.engine.jdbc.connections.internal.UserSuppliedConnectionProviderImpl;
import org.hibernate.jpa.HibernatePersistenceProvider; import org.hibernate.jpa.HibernatePersistenceProvider;
import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl; import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl;
import org.hibernate.jpa.boot.internal.PersistenceUnitInfoDescriptor; import org.hibernate.jpa.boot.internal.PersistenceUnitInfoDescriptor;
import org.hibernate.query.common.TemporalUnit;
import org.jspecify.annotations.Nullable; import org.jspecify.annotations.Nullable;
import org.springframework.data.util.Lazy; import org.springframework.data.util.Lazy;
import org.springframework.orm.jpa.persistenceunit.PersistenceManagedTypes; import org.springframework.orm.jpa.persistenceunit.PersistenceManagedTypes;
@ -142,11 +146,33 @@ class AotMetamodel implements Metamodel {
static SpringDataJpaAotDialect INSTANCE = new SpringDataJpaAotDialect(); static SpringDataJpaAotDialect INSTANCE = new SpringDataJpaAotDialect();
public boolean isCurrentTimestampSelectStringCallable() {
return false;
}
public String getCurrentTimestampSelectString() {
return "call current_timestamp()";
}
@Override
public LimitHandler getLimitHandler() {
return OffsetFetchLimitHandler.INSTANCE;
}
@Override @Override
public SequenceSupport getSequenceSupport() { public SequenceSupport getSequenceSupport() {
return ANSISequenceSupport.INSTANCE; return ANSISequenceSupport.INSTANCE;
} }
@Override
@SuppressWarnings("deprecation")
public String timestampdiffPattern(TemporalUnit unit, TemporalType fromTemporalType, TemporalType toTemporalType) {
if (unit == null) {
return "(?3-?2)";
}
return "datediff(?1,?2,?3)";
}
} }
} }

Loading…
Cancel
Save