Skip to content

Commit fae0a06

Browse files
author
tcordel
committed
HHH-19862: apply review suggestions
1 parent 4d6774d commit fae0a06

File tree

2 files changed

+75
-18
lines changed

2 files changed

+75
-18
lines changed

hibernate-core/src/test/java/org/hibernate/orm/test/jpa/criteria/convert/ConvertedDateAttributeTest.java

Lines changed: 57 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,39 +7,79 @@
77
import jakarta.persistence.criteria.CriteriaBuilder;
88
import jakarta.persistence.criteria.CriteriaUpdate;
99
import jakarta.persistence.criteria.Root;
10-
1110
import org.hibernate.testing.orm.junit.DomainModel;
11+
import org.hibernate.testing.orm.junit.JiraKey;
1212
import org.hibernate.testing.orm.junit.SessionFactory;
1313
import org.hibernate.testing.orm.junit.SessionFactoryScope;
14-
import org.junit.jupiter.api.Test;
14+
import org.hibernate.testing.orm.junit.SessionFactoryScopeAware;
15+
import org.junit.jupiter.params.ParameterizedTest;
16+
import org.junit.jupiter.params.provider.Arguments;
17+
import org.junit.jupiter.params.provider.MethodSource;
1518

1619
import java.util.Date;
20+
import java.util.function.Consumer;
21+
import java.util.stream.Stream;
22+
23+
import static org.junit.jupiter.api.Assertions.assertEquals;
1724

18-
@DomainModel( annotatedClasses = { Log.class } )
25+
@DomainModel(annotatedClasses = {Log.class})
1926
@SessionFactory
20-
public class ConvertedDateAttributeTest {
21-
@Test
22-
public void testConvertedFieldUpdateUsingStaticModel(SessionFactoryScope scope) {
27+
@JiraKey(value = "HHH-19862")
28+
public class ConvertedDateAttributeTest implements SessionFactoryScopeAware {
29+
private SessionFactoryScope scope;
30+
31+
@ParameterizedTest
32+
@MethodSource("criteriaUpdateFieldSetters")
33+
public void testConvertedFieldUpdateUsingPath(Consumer<UpdateContext> criteriaUpdateFieldSetter) {
2334

2435
scope.inTransaction( (session) -> {
36+
Log log = new Log();
37+
session.persist( log );
38+
2539
final CriteriaBuilder cb = session.getCriteriaBuilder();
2640
final CriteriaUpdate<Log> query = cb.createCriteriaUpdate( Log.class );
27-
query.set( Log_.date, new Date());
28-
session.createMutationQuery( query ).executeUpdate();
41+
final Root<Log> root = query.from( Log.class );
42+
query.where( cb.equal( root.get( Log_.id ), log.getId() ) );
43+
Date update = new Date();
44+
criteriaUpdateFieldSetter.accept( new UpdateContext( query, root, update ) );
45+
46+
int updates = session.createMutationQuery( query ).executeUpdate();
47+
session.refresh( log );
48+
49+
assertEquals( 1, updates );
50+
assertEquals( log.getLastUpdate(), update );
51+
2952
} );
53+
}
3054

55+
@Override
56+
public void injectSessionFactoryScope(SessionFactoryScope scope) {
57+
this.scope = scope;
3158
}
3259

33-
@Test
34-
public void testConvertedFieldUpdateUsingPath(SessionFactoryScope scope) {
60+
static class UpdateContext {
61+
final CriteriaUpdate<Log> query;
62+
final Root<Log> root;
63+
final Date lastUpdate;
3564

36-
scope.inTransaction( (session) -> {
37-
final CriteriaBuilder cb = session.getCriteriaBuilder();
38-
final CriteriaUpdate<Log> query = cb.createCriteriaUpdate( Log.class );
39-
final Root<Log> root = query.from( Log.class );
40-
query.set(root.get(Log_.date), new Date());
41-
session.createMutationQuery( query ).executeUpdate();
42-
} );
65+
public UpdateContext(CriteriaUpdate<Log> query, Root<Log> root, Date lastUpdate) {
66+
this.query = query;
67+
this.root = root;
68+
this.lastUpdate = lastUpdate;
69+
}
70+
}
4371

72+
static Stream<Arguments> criteriaUpdateFieldSetters() {
73+
Consumer<UpdateContext> updateUsingPath = context ->
74+
context.query.set( context.root.get( Log_.lastUpdate ), context.lastUpdate );
75+
Consumer<UpdateContext> updateUsingSingularAttribute = context ->
76+
context.query.set( Log_.lastUpdate, context.lastUpdate );
77+
Consumer<UpdateContext> updateUsingName = context ->
78+
context.query.set( Log_.LAST_UPDATE, context.lastUpdate );
79+
return Stream.of(
80+
Arguments.of( updateUsingPath ),
81+
Arguments.of( updateUsingSingularAttribute ),
82+
Arguments.of( updateUsingName )
83+
);
4484
}
4585
}

hibernate-core/src/test/java/org/hibernate/orm/test/jpa/criteria/convert/Log.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,41 @@
88
import jakarta.persistence.Convert;
99
import jakarta.persistence.Converter;
1010
import jakarta.persistence.Entity;
11+
import jakarta.persistence.GeneratedValue;
12+
import jakarta.persistence.GenerationType;
1113
import jakarta.persistence.Id;
1214

1315
import java.util.Date;
1416
@Entity
1517
public class Log {
1618
@Id
19+
@GeneratedValue(strategy = GenerationType.IDENTITY)
1720
private Long id;
1821
@Convert(converter = DateConverter.class)
19-
private Date date;
22+
private Date lastUpdate;
2023
@Converter
2124
static class DateConverter implements AttributeConverter<Date, Long> {
2225
@Override
2326
public Long convertToDatabaseColumn(Date date) {
27+
if (null == date) {
28+
return null;
29+
}
2430
return date.getTime();
2531
}
2632
@Override
2733
public Date convertToEntityAttribute(Long dbDate) {
34+
if (null == dbDate) {
35+
return null;
36+
}
2837
return new Date( dbDate );
2938
}
3039
}
40+
41+
public Long getId() {
42+
return id;
43+
}
44+
45+
public Date getLastUpdate() {
46+
return lastUpdate;
47+
}
3148
}

0 commit comments

Comments
 (0)