HHH-16189 Add test for issue
This commit is contained in:
parent
42f64f1c2e
commit
75d1f36ded
|
@ -65,6 +65,20 @@ public class MapIssueTest {
|
|||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMapKeyDeReferenceDoesNotCauseJoin(SessionFactoryScope scope) {
|
||||
SQLStatementInspector statementInspector = scope.getCollectingStatementInspector();
|
||||
statementInspector.clear();
|
||||
scope.inTransaction(
|
||||
s -> {
|
||||
s.createQuery( "select c from MapOwner as o left join o.contents c where key(c).id is not null" ).list();
|
||||
statementInspector.assertExecutedCount( 1 );
|
||||
// Assert 2 joins, collection table and collection element
|
||||
statementInspector.assertNumberOfJoins( 0, 2 );
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMapKeyJoinIsReused(SessionFactoryScope scope) {
|
||||
SQLStatementInspector statementInspector = scope.getCollectingStatementInspector();
|
||||
|
|
|
@ -0,0 +1,137 @@
|
|||
package org.hibernate.orm.test.orderby;
|
||||
|
||||
import org.hibernate.dialect.H2Dialect;
|
||||
import org.hibernate.dialect.PostgreSQLDialect;
|
||||
|
||||
import org.hibernate.testing.TestForIssue;
|
||||
import org.hibernate.testing.orm.junit.DomainModel;
|
||||
import org.hibernate.testing.orm.junit.RequiresDialect;
|
||||
import org.hibernate.testing.orm.junit.SessionFactory;
|
||||
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Embeddable;
|
||||
import jakarta.persistence.EmbeddedId;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.ManyToOne;
|
||||
|
||||
@DomainModel(
|
||||
annotatedClasses = {
|
||||
EmbeddedIdOrderByAndAggregateFunctionTest.Parent.class,
|
||||
EmbeddedIdOrderByAndAggregateFunctionTest.Child.class,
|
||||
}
|
||||
)
|
||||
@SessionFactory
|
||||
@TestForIssue(jiraKey = "HHH-16189")
|
||||
public class EmbeddedIdOrderByAndAggregateFunctionTest {
|
||||
|
||||
@Test
|
||||
@RequiresDialect(PostgreSQLDialect.class)
|
||||
@RequiresDialect(H2Dialect.class)
|
||||
public void testSelectWithOrderAndGroupBy(SessionFactoryScope scope) {
|
||||
scope.inTransaction(
|
||||
session -> {
|
||||
session.createQuery(
|
||||
"select c.id,c.name, sum(p.number) " +
|
||||
"from Parent p " +
|
||||
"inner join p.child c " +
|
||||
"group by c.id " +
|
||||
"order by c.name",
|
||||
Object[].class
|
||||
)
|
||||
.getResultList();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSelectWithOrderAndGroupBy2(SessionFactoryScope scope) {
|
||||
scope.inTransaction(
|
||||
session -> {
|
||||
session.createQuery(
|
||||
"select c.id, sum(p.number) " +
|
||||
"from Parent p " +
|
||||
"inner join p.child c " +
|
||||
"group by c.id " +
|
||||
"order by c.id",
|
||||
Object[].class
|
||||
)
|
||||
.getResultList();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSelectWithOrderAndGroupBy3(SessionFactoryScope scope) {
|
||||
scope.inTransaction(
|
||||
session -> {
|
||||
session.createQuery(
|
||||
"select c.id.id1, sum(p.number) " +
|
||||
"from Parent p " +
|
||||
"inner join p.child c " +
|
||||
"group by c.id.id1 " +
|
||||
"order by c.id.id1",
|
||||
Object[].class
|
||||
)
|
||||
.getResultList();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSelectWithHaving(SessionFactoryScope scope) {
|
||||
scope.inTransaction(
|
||||
session -> {
|
||||
session.createQuery(
|
||||
"select c.id, sum(p.number) " +
|
||||
"from Parent p " +
|
||||
"inner join p.child c " +
|
||||
"group by c.id " +
|
||||
"having c.id > :childId",
|
||||
Object[].class
|
||||
)
|
||||
.setParameter( "childId", new ChildId( 1l, 2l ) )
|
||||
.getResultList();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Entity(name = "Parent")
|
||||
public static class Parent {
|
||||
|
||||
@Id
|
||||
private String code;
|
||||
|
||||
@ManyToOne
|
||||
private Child child;
|
||||
|
||||
@Column(name = "NUMBER_COLUMN")
|
||||
int number;
|
||||
}
|
||||
|
||||
@Entity(name = "Child")
|
||||
public static class Child {
|
||||
|
||||
@EmbeddedId
|
||||
private ChildId id;
|
||||
|
||||
private String name;
|
||||
}
|
||||
|
||||
@Embeddable
|
||||
public static class ChildId {
|
||||
private long id1;
|
||||
private long id2;
|
||||
|
||||
public ChildId() {
|
||||
}
|
||||
|
||||
public ChildId(long id1, long id2) {
|
||||
this.id1 = id1;
|
||||
this.id2 = id2;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,105 @@
|
|||
package org.hibernate.orm.test.orderby;
|
||||
|
||||
import org.hibernate.dialect.DerbyDialect;
|
||||
import org.hibernate.dialect.H2Dialect;
|
||||
import org.hibernate.dialect.PostgreSQLDialect;
|
||||
|
||||
import org.hibernate.testing.TestForIssue;
|
||||
import org.hibernate.testing.orm.junit.DomainModel;
|
||||
import org.hibernate.testing.orm.junit.RequiresDialect;
|
||||
import org.hibernate.testing.orm.junit.SessionFactory;
|
||||
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
||||
import org.hibernate.testing.orm.junit.SkipForDialect;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.ManyToOne;
|
||||
|
||||
@DomainModel(
|
||||
annotatedClasses = {
|
||||
OrderByAndAggregateFunctionTest.Parent.class,
|
||||
OrderByAndAggregateFunctionTest.Child.class,
|
||||
}
|
||||
)
|
||||
@SessionFactory
|
||||
@TestForIssue(jiraKey = "HHH-16189")
|
||||
public class OrderByAndAggregateFunctionTest {
|
||||
|
||||
@Test
|
||||
@RequiresDialect(PostgreSQLDialect.class)
|
||||
@RequiresDialect(H2Dialect.class)
|
||||
public void testSelectWithOrderAndGroupBy(SessionFactoryScope scope) {
|
||||
scope.inTransaction(
|
||||
session -> {
|
||||
session.createQuery(
|
||||
"select c.id,c.name, sum(p.number) " +
|
||||
"from Parent p " +
|
||||
"inner join p.child c " +
|
||||
"group by c.id " +
|
||||
"order by c.name",
|
||||
Object[].class
|
||||
)
|
||||
.getResultList();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSelectWithOrderAndGroupBy2(SessionFactoryScope scope) {
|
||||
scope.inTransaction(
|
||||
session -> {
|
||||
session.createQuery(
|
||||
"select c.id, sum(p.number) " +
|
||||
"from Parent p " +
|
||||
"inner join p.child c " +
|
||||
"group by c.id " +
|
||||
"order by c.id",
|
||||
Object[].class
|
||||
)
|
||||
.getResultList();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSelectWithHaving(SessionFactoryScope scope) {
|
||||
scope.inTransaction(
|
||||
session -> {
|
||||
session.createQuery(
|
||||
"select c.id, sum(p.number) " +
|
||||
"from Parent p " +
|
||||
"inner join p.child c " +
|
||||
"group by c.id " +
|
||||
"having c.id > 5",
|
||||
Object[].class
|
||||
)
|
||||
.getResultList();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Entity(name = "Parent")
|
||||
public static class Parent {
|
||||
|
||||
@Id
|
||||
private String code;
|
||||
|
||||
@ManyToOne
|
||||
private Child child;
|
||||
|
||||
@Column(name = "NUMBER_COLUMN")
|
||||
int number;
|
||||
}
|
||||
|
||||
@Entity(name = "Child")
|
||||
public static class Child {
|
||||
|
||||
@Id
|
||||
private Long id;
|
||||
|
||||
private String name;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue