diff --git a/ci/quarkus.Jenkinsfile b/ci/quarkus.Jenkinsfile deleted file mode 100644 index 45cda43ddf92..000000000000 --- a/ci/quarkus.Jenkinsfile +++ /dev/null @@ -1,64 +0,0 @@ -@Library('hibernate-jenkins-pipeline-helpers@1.5') _ - -// Avoid running the pipeline on branch indexing -if (currentBuild.getBuildCauses().toString().contains('BranchIndexingCause')) { - print "INFO: Build skipped due to trigger being Branch Indexing" - currentBuild.result = 'NOT_BUILT' - return -} -// This is a limited maintenance branch, so don't run this on pushes to the branch, only on PRs -if ( !env.CHANGE_ID ) { - print "INFO: Build skipped because this job should only run for pull request, not for branch pushes" - currentBuild.result = 'NOT_BUILT' - return -} - -pipeline { - agent { - label 'LongDuration' - } - tools { - jdk 'OpenJDK 17 Latest' - } - options { - buildDiscarder(logRotator(numToKeepStr: '3', artifactNumToKeepStr: '3')) - disableConcurrentBuilds(abortPrevious: true) - } - stages { - stage('Build') { - steps { - script { - sh './gradlew publishToMavenLocal -PmavenMirror=nexus-load-balancer-c4cf05fd92f43ef8.elb.us-east-1.amazonaws.com --no-daemon' - script { - env.HIBERNATE_VERSION = sh ( - script: "grep hibernateVersion gradle/version.properties|cut -d'=' -f2", - returnStdout: true - ).trim() - } - dir('.release/quarkus') { - sh "git clone -b 3.2 --single-branch https://github.com/quarkusio/quarkus.git . || git reset --hard && git clean -fx && git pull" - sh "sed -i 's@.*@${env.HIBERNATE_VERSION}@' bom/application/pom.xml" - // Need to override the default maven configuration this way, because there is no other way to do it - sh "sed -i 's/-Xmx5g/-Xmx1920m/' ./.mvn/jvm.config" - sh "echo -e '\\n-XX:MaxMetaspaceSize=768m'>>./.mvn/jvm.config" - sh "./mvnw -pl !docs -Dquickly install" - // Need to kill the gradle daemons started during the Maven install run - sh "sudo pkill -f '.*GradleDaemon.*' || true" - // Need to override the default maven configuration this way, because there is no other way to do it - sh "sed -i 's/-Xmx1920m/-Xmx1372m/' ./.mvn/jvm.config" - sh "sed -i 's/MaxMetaspaceSize=768m/MaxMetaspaceSize=512m/' ./.mvn/jvm.config" - def excludes = "'!integration-tests/kafka-oauth-keycloak,!integration-tests/kafka-sasl-elytron,!integration-tests/hibernate-search-orm-opensearch,!integration-tests/maven,!docs,!integration-tests/mongodb-client,!integration-tests/mongodb-panache,!integration-tests/mongodb-panache-kotlin,!integration-tests/mongodb-devservices,!integration-tests/mongodb-rest-data-panache,!integration-tests/liquibase-mongodb,!extensions/mongodb-client/deployment,!extensions/liquibase-mongodb/deployment,!extensions/panache/mongodb-panache/deployment,!extensions/panache/mongodb-panache-kotlin/deployment,!extensions/panache/mongodb-panache-kotlin/runtime,!extensions/panache/mongodb-rest-data-panache/deployment,!extensions/panache/mongodb-panache-common/deployment'" - sh "TESTCONTAINERS_RYUK_CONTAINER_PRIVILEGED=true ./mvnw -pl :quarkus-hibernate-orm -amd -pl ${excludes} verify -Dstart-containers -Dtest-containers -Dskip.gradle.build" - } - } - } - } - } - post { - always { - configFileProvider([configFile(fileId: 'job-configuration.yaml', variable: 'JOB_CONFIGURATION_FILE')]) { - notifyBuildResult maintainers: (String) readYaml(file: env.JOB_CONFIGURATION_FILE).notification?.email?.recipients - } - } - } -} \ No newline at end of file diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/internal/QuerySqmImpl.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/internal/QuerySqmImpl.java index 98e3cba8fd43..930435bf78f0 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/internal/QuerySqmImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/internal/QuerySqmImpl.java @@ -732,7 +732,12 @@ protected void verifyUpdate() { protected int doExecuteUpdate() { getSession().prepareForQueryExecution( true ); - return resolveNonSelectQueryPlan().executeUpdate( this ); + try { + return resolveNonSelectQueryPlan().executeUpdate( this ); + } + finally { + domainParameterXref.clearExpansions(); + } } private NonSelectQueryPlan resolveNonSelectQueryPlan() { diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/query/ReuseQueryWithExpandedParameterTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/query/ReuseQueryWithExpandedParameterTest.java new file mode 100644 index 000000000000..7d61b39be316 --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/query/ReuseQueryWithExpandedParameterTest.java @@ -0,0 +1,79 @@ +package org.hibernate.orm.test.jpa.query; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.Query; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Yanming Zhou + */ + +@Jpa(annotatedClasses = ReuseQueryWithExpandedParameterTest.Person.class) +@JiraKey("HHH-18027") +public class ReuseQueryWithExpandedParameterTest { + + @Test + public void reuseQueryWithExpandedParameter(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + Person a = new Person( "a" ); + em.persist( a ); + Person b = new Person( "b" ); + em.persist( b ); + Person c = new Person( "c" ); + em.persist( c ); + Person d = new Person( "d" ); + em.persist( d ); + + Query q = em.createQuery( "from Person where name in (:names)" ); + assertEquals( 2, q.setParameter( "names", Set.of( "a", "b" ) ).getResultList().size() ); + assertEquals( 2, q.setParameter( "names", Set.of( "c", "d" ) ).getResultList().size() ); + + q = em.createQuery( "delete from Person where name in (:names)" ); + assertEquals( 2, q.setParameter( "names", Set.of( "a", "b" ) ).executeUpdate() ); + assertEquals( 2, q.setParameter( "names", Set.of( "c", "d" ) ).executeUpdate() ); + } ); + } + + @Entity(name = "Person") + public static class Person { + @Id + @GeneratedValue + private Long id; + + private String name; + + public Person() { + } + + public Person(String name) { + this.name = name; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + } + +} +