Skip to content

Commit 8f9b861

Browse files
oscarfanchinvladmihalcea
authored andcommitted
Add support for addScalar in the Hibernate 7 module #792
1 parent bdfcf19 commit 8f9b861

19 files changed

+89
-48
lines changed

hypersistence-utils-hibernate-70/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@
204204
</build>
205205

206206
<properties>
207-
<jdk.version>11</jdk.version>
207+
<jdk.version>17</jdk.version>
208208
<jdk-test.version>17</jdk-test.version>
209209
<maven.compiler.release>${jdk.version}</maven.compiler.release>
210210
<maven.compiler.testRelease>${jdk-test.version}</maven.compiler.testRelease>

hypersistence-utils-hibernate-70/src/main/java/io/hypersistence/utils/hibernate/type/basic/internal/NumberJdbcTypeDescriptor.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -89,15 +89,17 @@ private JdbcType sqlTypeDescriptor() {
8989
}
9090

9191
private JdbcType resolveJdbcTypeDescriptor() {
92-
DynamicParameterizedType.ParameterType parameterType = ParameterTypeUtils.resolve(properties);
93-
if (parameterType != null) {
94-
String columnType = ParameterTypeUtils.getColumnType(parameterType);
95-
if (!StringUtils.isBlank(columnType)) {
96-
switch (columnType) {
97-
case "tinyint":
98-
return TinyIntJdbcType.INSTANCE;
99-
case "smallint":
100-
return SmallIntJdbcType.INSTANCE;
92+
if (properties != null && !properties.isEmpty()) {
93+
DynamicParameterizedType.ParameterType parameterType = ParameterTypeUtils.resolve(properties);
94+
if (parameterType != null) {
95+
String columnType = ParameterTypeUtils.getColumnType(parameterType);
96+
if (!StringUtils.isBlank(columnType)) {
97+
switch (columnType) {
98+
case "tinyint":
99+
return TinyIntJdbcType.INSTANCE;
100+
case "smallint":
101+
return SmallIntJdbcType.INSTANCE;
102+
}
101103
}
102104
}
103105
}

hypersistence-utils-hibernate-70/src/main/java/io/hypersistence/utils/hibernate/type/json/JsonBlobType.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
package io.hypersistence.utils.hibernate.type.json;
22

3+
import java.lang.reflect.Type;
4+
import java.sql.Blob;
5+
36
import com.fasterxml.jackson.databind.ObjectMapper;
4-
import io.hypersistence.utils.hibernate.type.MutableDynamicParameterizedType;
7+
8+
import io.hypersistence.utils.hibernate.type.json.internal.AbstractJsonType;
59
import io.hypersistence.utils.hibernate.type.json.internal.JsonBlobJdbcTypeDescriptor;
610
import io.hypersistence.utils.hibernate.type.json.internal.JsonJavaTypeDescriptor;
711
import io.hypersistence.utils.hibernate.type.util.JsonConfiguration;
812
import io.hypersistence.utils.hibernate.type.util.ObjectMapperWrapper;
913

10-
import java.lang.reflect.Type;
11-
import java.sql.Blob;
12-
1314
/**
1415
* <p>
1516
* Maps any given Java object on a JSON column type that is managed via {@link java.sql.PreparedStatement#setBlob(int, Blob)} at JDBC Driver level.
@@ -26,7 +27,7 @@
2627
*
2728
* @author Vlad Mihalcea
2829
*/
29-
public class JsonBlobType extends MutableDynamicParameterizedType<Object, JsonBlobJdbcTypeDescriptor, JsonJavaTypeDescriptor> {
30+
public class JsonBlobType extends AbstractJsonType<Object> {
3031

3132
public static final JsonBlobType INSTANCE = new JsonBlobType();
3233

hypersistence-utils-hibernate-70/src/main/java/io/hypersistence/utils/hibernate/type/json/JsonClobType.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.fasterxml.jackson.databind.ObjectMapper;
44
import io.hypersistence.utils.hibernate.type.MutableDynamicParameterizedType;
5+
import io.hypersistence.utils.hibernate.type.json.internal.AbstractJsonType;
56
import io.hypersistence.utils.hibernate.type.json.internal.JsonClobJdbcTypeDescriptor;
67
import io.hypersistence.utils.hibernate.type.json.internal.JsonJavaTypeDescriptor;
78
import io.hypersistence.utils.hibernate.type.util.JsonConfiguration;
@@ -10,6 +11,8 @@
1011
import java.lang.reflect.Type;
1112
import java.sql.Clob;
1213

14+
import org.hibernate.boot.models.annotations.internal.ExtendsXmlAnnotation;
15+
1316
/**
1417
* <p>
1518
* Maps any given Java object on a JSON column type that is managed via {@link java.sql.PreparedStatement#setClob(int, Clob)} at JDBC Driver level.
@@ -27,7 +30,7 @@
2730
* @author Vlad Mihalcea
2831
* @author Andreas Gebhardt
2932
*/
30-
public class JsonClobType extends MutableDynamicParameterizedType<Object, JsonClobJdbcTypeDescriptor, JsonJavaTypeDescriptor> {
33+
public class JsonClobType extends AbstractJsonType<Object> {
3134

3235
public static final JsonClobType INSTANCE = new JsonClobType();
3336

hypersistence-utils-hibernate-70/src/main/java/io/hypersistence/utils/hibernate/type/json/JsonStringType.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
package io.hypersistence.utils.hibernate.type.json;
22

3+
import java.lang.reflect.Type;
4+
5+
import org.hibernate.type.descriptor.jdbc.JdbcType;
6+
import org.hibernate.type.spi.TypeConfiguration;
7+
38
import com.fasterxml.jackson.databind.ObjectMapper;
4-
import io.hypersistence.utils.hibernate.type.MutableDynamicParameterizedType;
9+
10+
import io.hypersistence.utils.hibernate.type.json.internal.AbstractJsonType;
511
import io.hypersistence.utils.hibernate.type.json.internal.JsonJavaTypeDescriptor;
612
import io.hypersistence.utils.hibernate.type.json.internal.JsonStringJdbcTypeDescriptor;
713
import io.hypersistence.utils.hibernate.type.util.JsonConfiguration;
814
import io.hypersistence.utils.hibernate.type.util.ObjectMapperWrapper;
9-
import org.hibernate.type.descriptor.jdbc.JdbcType;
10-
import org.hibernate.type.spi.TypeConfiguration;
11-
12-
import java.lang.reflect.Type;
1315

1416
/**
1517
* <p>
@@ -34,7 +36,7 @@
3436
*
3537
* @author Vlad Mihalcea
3638
*/
37-
public class JsonStringType extends MutableDynamicParameterizedType<Object, JsonStringJdbcTypeDescriptor, JsonJavaTypeDescriptor> {
39+
public class JsonStringType extends AbstractJsonType<Object> {
3840

3941
public static final JsonStringType INSTANCE = new JsonStringType();
4042

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package io.hypersistence.utils.hibernate.type.json.internal;
2+
3+
import org.checkerframework.checker.nullness.qual.Nullable;
4+
import org.hibernate.type.descriptor.converter.spi.BasicValueConverter;
5+
import org.hibernate.type.descriptor.java.AbstractClassJavaType;
6+
import org.hibernate.type.descriptor.java.JavaType;
7+
8+
import io.hypersistence.utils.hibernate.type.MutableDynamicParameterizedType;
9+
import io.hypersistence.utils.hibernate.type.util.Configuration;
10+
11+
public abstract class AbstractJsonType<T> extends MutableDynamicParameterizedType<T, AbstractJsonJdbcTypeDescriptor, AbstractClassJavaType<T>> {
12+
13+
protected AbstractJsonType(Class<T> returnedClass, AbstractJsonJdbcTypeDescriptor jdbcTypeDescriptor,
14+
AbstractClassJavaType<T> javaTypeDescriptor, Configuration configuration) {
15+
super(returnedClass, jdbcTypeDescriptor, javaTypeDescriptor, configuration);
16+
}
17+
18+
protected AbstractJsonType(Class<T> returnedClass, AbstractJsonJdbcTypeDescriptor jdbcTypeDescriptor,
19+
AbstractClassJavaType<T> javaTypeDescriptor) {
20+
super(returnedClass, jdbcTypeDescriptor, javaTypeDescriptor);
21+
}
22+
23+
@Override
24+
public BasicValueConverter<T, Object> getValueConverter() {
25+
return new BasicValueConverterImplementation();
26+
}
27+
28+
private final class BasicValueConverterImplementation implements BasicValueConverter<T, Object> {
29+
@SuppressWarnings("unchecked")
30+
@Override
31+
public @Nullable T toDomainValue(@Nullable Object relationalForm) {
32+
return (T) relationalForm;
33+
}
34+
35+
@Override
36+
public @Nullable Object toRelationalValue(@Nullable T domainForm) {
37+
return domainForm;
38+
}
39+
40+
@Override
41+
public JavaType<T> getDomainJavaType() {
42+
return getJavaTypeDescriptor();
43+
}
44+
45+
@SuppressWarnings("unchecked")
46+
@Override
47+
public JavaType<Object> getRelationalJavaType() {
48+
return (JavaType<Object>) getJavaTypeDescriptor();
49+
}
50+
}
51+
}

hypersistence-utils-hibernate-70/src/test/java/io/hypersistence/utils/hibernate/id/AbstractBatchSequenceGeneratorTest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,10 @@
33
import io.hypersistence.utils.hibernate.util.AbstractTest;
44
import io.hypersistence.utils.test.providers.DataSourceProvider;
55
import jakarta.persistence.Entity;
6-
import jakarta.persistence.GeneratedValue;
76
import jakarta.persistence.Id;
87
import jakarta.persistence.Table;
98
import net.ttddyy.dsproxy.QueryCount;
109
import net.ttddyy.dsproxy.QueryCountHolder;
11-
import org.hibernate.annotations.GenericGenerator;
12-
import org.hibernate.annotations.Parameter;
1310
import org.hibernate.cfg.AvailableSettings;
1411
import org.junit.Test;
1512

hypersistence-utils-hibernate-70/src/test/java/io/hypersistence/utils/hibernate/type/basic/PostgreSQLCITextTypeTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public Void apply(EntityManager entityManager) {
119119
FROM Country AS c
120120
WHERE c.name LIKE :token
121121
""")
122-
.setParameter("token", token)
122+
.setParameter("token", token)
123123
.getResultList();
124124

125125
assertEquals(1, countries.size());

hypersistence-utils-hibernate-70/src/test/java/io/hypersistence/utils/hibernate/type/basic/PostgreSQLYearMonthIntegerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public void testIndexing() {
9797
doInJPA(entityManager -> {
9898

9999
YearMonth yearMonth = YearMonth.of(1970, 1);
100-
100+
101101
for (int i = 0; i < 5000; i++) {
102102
yearMonth = yearMonth.plusMonths(1);
103103

hypersistence-utils-hibernate-70/src/test/java/io/hypersistence/utils/hibernate/type/json/OracleJsonStringPropertyTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import org.hibernate.annotations.Type;
1313
import org.hibernate.jpa.boot.spi.TypeContributorList;
1414
import org.hibernate.query.NativeQuery;
15-
import org.junit.Ignore;
1615
import org.junit.Test;
1716

1817
import java.util.Collections;
@@ -61,7 +60,6 @@ protected void additionalProperties(Properties properties) {
6160
}
6261

6362
@Test
64-
@Ignore("TODO : addScalar")
6563
public void test() {
6664
doInJPA(entityManager -> {
6765
Book book = entityManager.unwrap(Session.class)

0 commit comments

Comments
 (0)