HHH-17743 Allow updates outside transaction

This commit is contained in:
subijayb 2024-02-20 16:51:16 +05:30 committed by Christian Beikov
parent e12dcc6195
commit 75e3ef9383
2 changed files with 24 additions and 1 deletions

View File

@ -661,7 +661,6 @@ public class QuerySqmImpl<R>
}
protected int doExecuteUpdate() {
getSession().prepareForQueryExecution( true );
return resolveNonSelectQueryPlan().executeUpdate( this );
}

View File

@ -7,14 +7,17 @@
package org.hibernate.orm.test.flush;
import jakarta.persistence.Entity;
import jakarta.persistence.EntityManager;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.NamedQuery;
import jakarta.persistence.Table;
import jakarta.persistence.TransactionRequiredException;
import org.hibernate.Session;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.sqm.internal.QuerySqmImpl;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
@ -24,6 +27,7 @@ import org.junit.Test;
import static org.hamcrest.core.IsNot.not;
import static org.hamcrest.core.IsNull.nullValue;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertEquals;
/**
* @author Andrea Boriero
@ -130,8 +134,28 @@ public class NonTransactionalDataAccessTest extends BaseCoreFunctionalTestCase {
}
}
@Test
public void hhh17743Test() throws Exception {
allowUpdateOperationOutsideTransaction = "true";
rebuildSessionFactory();
prepareTest();
try(Session s = openSession();
EntityManager entityManager = s.getEntityManagerFactory().createEntityManager();) {
MyEntity entity = new MyEntity("N1");
entityManager.persist(entity);
QuerySqmImpl q = (QuerySqmImpl)entityManager.createNamedQuery("deleteByName");
q.setParameter("name", "N1");
int d = q.executeUpdate();
assertEquals(0, d);
}
}
@Entity(name = "MyEntity")
@Table(name = "MY_ENTITY")
@NamedQuery(name = "deleteByName", query = "delete from MyEntity where name = :name")
public static class MyEntity {
@Id
@GeneratedValue