Skip to content

Commit bde5f78

Browse files
committed
add more tests for specification enhancements
1 parent 44802c7 commit bde5f78

File tree

4 files changed

+59
-6
lines changed

4 files changed

+59
-6
lines changed

hibernate-core/src/main/java/org/hibernate/query/sqm/tree/update/SqmSetClause.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
package org.hibernate.query.sqm.tree.update;
66

77
import java.util.ArrayList;
8-
import java.util.Collections;
98
import java.util.List;
109
import java.util.Objects;
1110

hibernate-core/src/test/java/org/hibernate/orm/test/query/assignment/AssignmentTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,36 @@ void tearDown(SessionFactoryScope scope) {
173173

174174
}
175175

176+
@Test void testCriteriaDelete(SessionFactoryScope scope) {
177+
var bookType = scope.getSessionFactory().getJpaMetamodel().findEntityType(Book.class);
178+
assertNotNull( bookType );
179+
@SuppressWarnings("unchecked")
180+
var title =
181+
(SingularAttribute<? super Book, String>)
182+
bookType.findSingularAttribute("title");
183+
@SuppressWarnings("unchecked")
184+
var isbn =
185+
(SingularAttribute<? super Book, String>)
186+
bookType.findSingularAttribute("isbn");
187+
188+
scope.inTransaction( session -> {
189+
var builder = session.getCriteriaBuilder();
190+
var query = builder.createCriteriaDelete( Book.class );
191+
var root = query.from( Book.class );
192+
DeleteSpecification.create( query )
193+
.restrict( Restriction.startsWith( title, "Hibernate" ) )
194+
.createQuery( session )
195+
.executeUpdate();
196+
var list =
197+
SimpleProjectionSpecification.create( SelectionSpecification.create( Book.class ), isbn )
198+
.createQuery( session )
199+
.getResultList();
200+
assertEquals( 1, list.size() );
201+
assertEquals( "9781617290459", list.get( 0 ) );
202+
} );
203+
204+
}
205+
176206
@Entity(name="Book")
177207
static class Book {
178208
@Id String isbn;

hibernate-core/src/test/java/org/hibernate/orm/test/query/dynamic/OtherEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@
1212
@Table(name = "OtherEntity")
1313
public class OtherEntity {
1414
@Id
15-
private Integer id;
15+
Integer id;
1616
}

hibernate-core/src/test/java/org/hibernate/orm/test/query/dynamic/ProjectionSpecificationTest.java

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import org.junit.jupiter.api.Test;
1313

1414
import static org.junit.jupiter.api.Assertions.assertEquals;
15-
import static org.junit.jupiter.api.Assertions.assertNull;
15+
import static org.junit.jupiter.api.Assertions.assertNotNull;
1616

1717
/**
1818
* @author Steve Ebersole
@@ -25,7 +25,9 @@ public class ProjectionSpecificationTest {
2525
@BeforeAll
2626
public static void setup(SessionFactoryScope factoryScope) {
2727
factoryScope.inTransaction( (session) -> {
28-
session.createMutationQuery( "insert BasicEntity (id, name, position) values (1, 'Gavin', 2)" )
28+
session.createMutationQuery( "insert OtherEntity (id) values (69)" )
29+
.executeUpdate();
30+
session.createMutationQuery( "insert BasicEntity (id, name, position, other) values (1, 'Gavin', 2, (select o from OtherEntity o where o.id = 69))" )
2931
.executeUpdate();
3032
} );
3133
}
@@ -43,7 +45,7 @@ void testProjection(SessionFactoryScope factoryScope) {
4345
assertEquals( 2, position.in(tuple) );
4446
assertEquals( "Gavin", name.in(tuple) );
4547
assertEquals( 1, id.in(tuple) );
46-
assertNull( otherId.in( tuple ) );
48+
assertEquals( 69, otherId.in( tuple ) );
4749
});
4850
}
4951

@@ -67,7 +69,29 @@ void testSimpleProjectionPath(SessionFactoryScope factoryScope) {
6769
.to( BasicEntity_.other )
6870
.to( OtherEntity_.id ) );
6971
var id = projection.createQuery( session ).getSingleResult();
70-
assertNull( id );
72+
assertEquals( 69, id );
73+
});
74+
}
75+
76+
@Test
77+
void testSimpleEntityProjection(SessionFactoryScope factoryScope) {
78+
factoryScope.inTransaction( (session) -> {
79+
var spec = SelectionSpecification.create( BasicEntity.class );
80+
var projection = spec.createProjection( BasicEntity_.other );
81+
var otherEntity = projection.createQuery( session ).getSingleResult();
82+
assertNotNull( otherEntity );
83+
assertEquals( 69, otherEntity.id );
84+
});
85+
}
86+
87+
@Test
88+
void testSimpleEntityProjectionPath(SessionFactoryScope factoryScope) {
89+
factoryScope.inTransaction( (session) -> {
90+
var spec = SelectionSpecification.create( BasicEntity.class );
91+
var projection = spec.createProjection( Path.from(BasicEntity.class).to(BasicEntity_.other) );
92+
var otherEntity = projection.createQuery( session ).getSingleResult();
93+
assertNotNull( otherEntity );
94+
assertEquals( 69, otherEntity.id );
7195
});
7296
}
7397
}

0 commit comments

Comments
 (0)