HHH-15395 Add test for issue
This commit is contained in:
parent
e3d524fe5e
commit
d8636470ca
|
@ -0,0 +1,115 @@
|
||||||
|
package org.hibernate.orm.test.jpa.criteria;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.hibernate.dialect.DerbyDialect;
|
||||||
|
import org.hibernate.dialect.Dialect;
|
||||||
|
import org.hibernate.dialect.function.CommonFunctionFactory;
|
||||||
|
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||||
|
import org.hibernate.query.criteria.HibernateCriteriaBuilder;
|
||||||
|
|
||||||
|
import org.hibernate.testing.TestForIssue;
|
||||||
|
import org.hibernate.testing.orm.junit.EntityManagerFactoryScope;
|
||||||
|
import org.hibernate.testing.orm.junit.Jpa;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
|
import jakarta.persistence.criteria.CriteriaQuery;
|
||||||
|
import jakarta.persistence.criteria.Root;
|
||||||
|
import org.assertj.core.data.Offset;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
|
||||||
|
|
||||||
|
@Jpa(
|
||||||
|
annotatedClasses = PowerFunctionTest.Person.class
|
||||||
|
)
|
||||||
|
@TestForIssue(jiraKey = "HHH-15395")
|
||||||
|
public class PowerFunctionTest {
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void setUp(EntityManagerFactoryScope scope) {
|
||||||
|
scope.inTransaction(
|
||||||
|
entityManager -> {
|
||||||
|
Person person = new Person( 1L, "And", 50 );
|
||||||
|
entityManager.persist( person );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testIt(EntityManagerFactoryScope scope) {
|
||||||
|
scope.inTransaction(
|
||||||
|
entityManager -> {
|
||||||
|
HibernateCriteriaBuilder cb = (HibernateCriteriaBuilder) entityManager.getCriteriaBuilder();
|
||||||
|
CriteriaQuery<Double> query = cb.createQuery( Double.class );
|
||||||
|
Root<Person> root = query.from( Person.class );
|
||||||
|
|
||||||
|
query.select( cb.power( root.get( "age" ), 2 ) );
|
||||||
|
|
||||||
|
List<Double> results = entityManager.createQuery( query ).getResultList();
|
||||||
|
|
||||||
|
assertThat( results.size() ).isEqualTo( 1 );
|
||||||
|
|
||||||
|
if ( getDialect( scope ) instanceof DerbyDialect ) {
|
||||||
|
/**
|
||||||
|
for Derby dialect we are emulating the power function see {@link CommonFunctionFactory#power_expLn()}.
|
||||||
|
*/
|
||||||
|
assertThat( results.get( 0 ) ).isEqualTo( 2500D, Offset.offset( 0.000000000001 ) );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
assertThat( results.get( 0 ) ).isEqualTo( 2500D );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Dialect getDialect(EntityManagerFactoryScope scope) {
|
||||||
|
return ((SessionFactoryImplementor) scope.getEntityManagerFactory()).getJdbcServices().getDialect();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "Person")
|
||||||
|
public static class Person {
|
||||||
|
@Id
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private int age;
|
||||||
|
|
||||||
|
public Person() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Person(Long id, String name, int age) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
this.age = age;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getAge() {
|
||||||
|
return age;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAge(int age) {
|
||||||
|
this.age = age;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue