Перенесите @Type(type = "org.hibernate.type.ClassType") на Spring Boot 3

У меня есть следующий код, который я хочу перенести на Spring Boot 3:

  @Column(name = "OPTION_TYPE")
  @Type(type = "org.hibernate.type.ClassType")
  private Class<T> clazz;

Пример демо:

https://github.com/rcbandit111/jpa_class_store_migration_poc/blob/main/src/main/java/com/jpa/store/poc/EnumeratedAccountOption.java

Я получаю ошибку:

Cannot resolve method 'type'

Знаете ли вы, как я могу перенести этот код?

Обновлено:

Я пытался использовать:

@Column(name = "OPTION_TYPE")
@JdbcTypeCode(SqlTypes.JAVA_OBJECT)
private Class<T> clazz;

Я получаю эту ошибку:

Caused by: jakarta.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Unable to determine SQL type name for column 'option_type' of table 'account_options' because there is no type mapping for org.hibernate.type.SqlTypes code: 2000 (JAVA_OBJECT)
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:421) ~[spring-orm-6.1.5.jar!/:6.1.5]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-6.1.5.jar!/:6.1.5]
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366) ~[spring-orm-6.1.5.jar!/:6.1.5]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1833) ~[spring-beans-6.1.5.jar!/:6.1.5]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[spring-beans-6.1.5.jar!/:6.1.5]
        ... 92 common frames omitted
Caused by: org.hibernate.MappingException: Unable to determine SQL type name for column 'option_type' of table 'account_options' because there is no type mapping for org.hibernate.type.SqlTypes code: 2000 (JAVA_OBJECT)
0
0
214
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Spring Boot 3 обновлен до Hibernate 6. в Hibernate 6 аннотацию @Type можно заменить на @JdbcTypeCode, чтобы код работал.

@Column(name = "OPTION_TYPE")
@JdbcTypeCode(SqlTypes.JAVA_OBJECT)
private Class<T> clazz;

Basic Test class

@TestInstance(value=Lifecycle.PER_CLASS)
public class EnumeratedAccountOptionTest {
 private EnumeratedAccountOption<ExampleEnum> option;

@BeforeAll
public void setUp() {
    option = new EnumeratedAccountOption<>("Test Option", ExampleEnum.VALUE_ONE);
}

@Test
public void testGetOptionValue() {
    assertEquals(ExampleEnum.VALUE_ONE, option.getOptionValue());
}

@Test
public void testGetClazz() {
    assertEquals(ExampleEnum.class, option.getClazz());
}
@Test
public void testSetClazz() {
    option.setClazz(ExampleEnum.class);
    assertEquals(ExampleEnum.class, option.getClazz());
}
private enum ExampleEnum {
    VALUE_ONE,
    VALUE_TWO
}
}

Я получаю ошибку: Attribute value must be a class literal

Peter Penzov 07.04.2024 01:53

извините, с помощью @Convert вам придется определить своего собственного новообращенного, но я думаю, вы можете вместо этого попробовать @JdbcTypeCode(SqlTypes.JAVA_OBJECT). Дайте мне знать, если это сработает, я также обновлю ответ docs.jboss.org/hibernate/orm/6.2/javadocs/org/hibernate/type‌​/…

Sheheryar Aamir 07.04.2024 11:43

Я заменил код, но не могу его проверить. Я создал этот тестовый код: github.com/rcbandit111/jpa_class_store_migration_poc/blob/ma‌​in/… Есть идеи по поводу действительного теста?

Peter Penzov 07.04.2024 13:48

добавлен пример базового тестового класса

Sheheryar Aamir 07.04.2024 23:06

Работает ли он правильно?

Peter Penzov 07.04.2024 23:11

вы можете зафиксировать здесь github.com/rcbandit111/jpa_class_store_migration_poc и попробовать

Sheheryar Aamir 08.04.2024 14:45

К сожалению, я получаю ошибку при запуске. Пожалуйста, посмотрите стек ошибок сообщений.

Peter Penzov 17.04.2024 13:47

Можете ли вы обновить свою демо-версию, чтобы я мог разобраться в вашей проблеме?

Sheheryar Aamir 18.04.2024 09:03

Я спросил об этой проблеме на форуме группы пользователей Hibernate. Оказывается, это баг и мне посоветовали открыть баг: hibernate.atlassian.net/browse/HHH-17974

Peter Penzov 18.04.2024 09:46

Другие вопросы по теме