Jackson Data Types

For some reason I need save jackson JsonNode as an entity entity field like

@JmixEntity
@Table(name = "TEST_ENTITY", indexes = [
    Index(name = "IDX_TEST_ENTITY_UNQ", columnList = "CODE", unique = true)
])
@Entity
open class TestEntity {
    @JmixGeneratedValue
    @Column(name = "ID", nullable = false)
    @Id
    var id: UUID? = null

    @Column(name = "CODE")
    var code: String? = null

    @InstanceName
    @Column(name = "NAME")
    var name: String? = null
/* ... */
    @Column(name = "NODES")
    @Lob
    @Convert( converter = JsonNodeConverter::class)
    var nodes: JsonNode? = null
}

then I read How to write custom DataType and Converter ,after that I wrote a converter such as

@Converter
class JsonNodeConverter : AttributeConverter<JsonNode?, String?> {
    override fun convertToDatabaseColumn(jsonNode: JsonNode?): String? {
        if(jsonNode==null) return null
        try {
            return objectMapper.writeValueAsString(jsonNode)
        } catch (e: JsonProcessingException) {
            throw RuntimeException(e)
        }
    }

    override fun convertToEntityAttribute(s: String?): JsonNode? {
        if(s == null)return null
        try {
            return objectMapper.readTree(s)
        } catch (e: JsonProcessingException) {
            throw RuntimeException(e)
        }
    }

    companion object {
        private val objectMapper: ObjectMapper = ObjectMapper()
    }
}

after I run it ,I got exceptions like

org.springframework.context.ApplicationContextException: Unable to start web server
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:165) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:618) ~[spring-context-6.1.3.jar:6.1.3]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:334) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-3.2.2.jar:3.2.2]
	at com.company.test221rest.Test221restApplication$Companion.main(Test221restApplication.kt:46) ~[main/:na]
	at com.company.test221rest.Test221restApplication.main(Test221restApplication.kt) ~[main/:na]
Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat

	at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:145) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.<init>(TomcatWebServer.java:105) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:499) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:218) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:188) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:162) ~[spring-boot-3.2.2.jar:3.2.2]
	... 9 common frames omitted
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'io.jmix.security.SecurityConfiguration': Unsatisfied dependency expressed through field 'userRepository': Error creating bean with name 'UserRepository': Unsatisfied dependency expressed through field 'dataManager': Error creating bean with name 'core_UnconstrainedDataManager': Unsatisfied dependency expressed through field 'metadata': Error creating bean with name 'core_Metadata' defined in URL [jar:file:/ext/gradle/caches/modules-2/files-2.1/io.jmix.core/jmix-core/2.2.1/f0e02ab73b8296e637a1642b4be6d98b648ce8fd/jmix-core-2.2.1.jar!/io/jmix/core/impl/MetadataImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'core_MetadataLoader' defined in URL [jar:file:/ext/gradle/caches/modules-2/files-2.1/io.jmix.core/jmix-core/2.2.1/f0e02ab73b8296e637a1642b4be6d98b648ce8fd/jmix-core-2.2.1.jar!/io/jmix/core/impl/MetadataLoader.class]: Failed to instantiate [io.jmix.core.impl.MetadataLoader]: Constructor threw exception
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'io.jmix.security.SecurityConfiguration': Unsatisfied dependency expressed through field 'userRepository': Error creating bean with name 'UserRepository': Unsatisfied dependency expressed through field 'dataManager': Error creating bean with name 'core_UnconstrainedDataManager': Unsatisfied dependency expressed through field 'metadata': Error creating bean with name 'core_Metadata' defined in URL [jar:file:/ext/gradle/caches/modules-2/files-2.1/io.jmix.core/jmix-core/2.2.1/f0e02ab73b8296e637a1642b4be6d98b648ce8fd/jmix-core-2.2.1.jar!/io/jmix/core/impl/MetadataImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'core_MetadataLoader' defined in URL [jar:file:/ext/gradle/caches/modules-2/files-2.1/io.jmix.core/jmix-core/2.2.1/f0e02ab73b8296e637a1642b4be6d98b648ce8fd/jmix-core-2.2.1.jar!/io/jmix/core/impl/MetadataLoader.class]: Failed to instantiate [io.jmix.core.impl.MetadataLoader]: Constructor threw exception

	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:787) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:767) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:145) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:508) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1418) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:409) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1334) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1164) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:561) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:210) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addAsRegistrationBean(ServletContextInitializerBeans.java:173) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addAdaptableBeans(ServletContextInitializerBeans.java:155) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.springframework.boot.web.servlet.ServletContextInitializerBeans.<init>(ServletContextInitializerBeans.java:86) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:266) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:240) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:52) ~[spring-boot-3.2.2.jar:3.2.2]
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4866) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) ~[na:na]
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:845) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) ~[na:na]
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:240) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:917) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.apache.catalina.startup.Tomcat.start(Tomcat.java:488) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
	at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:126) ~[spring-boot-3.2.2.jar:3.2.2]
	... 14 common frames omitted
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'UserRepository': Unsatisfied dependency expressed through field 'dataManager': Error creating bean with name 'core_UnconstrainedDataManager': Unsatisfied dependency expressed through field 'metadata': Error creating bean with name 'core_Metadata' defined in URL [jar:file:/ext/gradle/caches/modules-2/files-2.1/io.jmix.core/jmix-core/2.2.1/f0e02ab73b8296e637a1642b4be6d98b648ce8fd/jmix-core-2.2.1.jar!/io/jmix/core/impl/MetadataImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'core_MetadataLoader' defined in URL [jar:file:/ext/gradle/caches/modules-2/files-2.1/io.jmix.core/jmix-core/2.2.1/f0e02ab73b8296e637a1642b4be6d98b648ce8fd/jmix-core-2.2.1.jar!/io/jmix/core/impl/MetadataLoader.class]: Failed to instantiate [io.jmix.core.impl.MetadataLoader]: Constructor threw exception
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'UserRepository': Unsatisfied dependency expressed through field 'dataManager': Error creating bean with name 'core_UnconstrainedDataManager': Unsatisfied dependency expressed through field 'metadata': Error creating bean with name 'core_Metadata' defined in URL [jar:file:/ext/gradle/caches/modules-2/files-2.1/io.jmix.core/jmix-core/2.2.1/f0e02ab73b8296e637a1642b4be6d98b648ce8fd/jmix-core-2.2.1.jar!/io/jmix/core/impl/MetadataImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'core_MetadataLoader' defined in URL [jar:file:/ext/gradle/caches/modules-2/files-2.1/io.jmix.core/jmix-core/2.2.1/f0e02ab73b8296e637a1642b4be6d98b648ce8fd/jmix-core-2.2.1.jar!/io/jmix/core/impl/MetadataLoader.class]: Failed to instantiate [io.jmix.core.impl.MetadataLoader]: Constructor threw exception

	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:787) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:767) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:145) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:508) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1418) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1443) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:784) ~[spring-beans-6.1.3.jar:6.1.3]
	... 64 common frames omitted
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'core_UnconstrainedDataManager': Unsatisfied dependency expressed through field 'metadata': Error creating bean with name 'core_Metadata' defined in URL [jar:file:/ext/gradle/caches/modules-2/files-2.1/io.jmix.core/jmix-core/2.2.1/f0e02ab73b8296e637a1642b4be6d98b648ce8fd/jmix-core-2.2.1.jar!/io/jmix/core/impl/MetadataImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'core_MetadataLoader' defined in URL [jar:file:/ext/gradle/caches/modules-2/files-2.1/io.jmix.core/jmix-core/2.2.1/f0e02ab73b8296e637a1642b4be6d98b648ce8fd/jmix-core-2.2.1.jar!/io/jmix/core/impl/MetadataLoader.class]: Failed to instantiate [io.jmix.core.impl.MetadataLoader]: Constructor threw exception
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'core_UnconstrainedDataManager': Unsatisfied dependency expressed through field 'metadata': Error creating bean with name 'core_Metadata' defined in URL [jar:file:/ext/gradle/caches/modules-2/files-2.1/io.jmix.core/jmix-core/2.2.1/f0e02ab73b8296e637a1642b4be6d98b648ce8fd/jmix-core-2.2.1.jar!/io/jmix/core/impl/MetadataImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'core_MetadataLoader' defined in URL [jar:file:/ext/gradle/caches/modules-2/files-2.1/io.jmix.core/jmix-core/2.2.1/f0e02ab73b8296e637a1642b4be6d98b648ce8fd/jmix-core-2.2.1.jar!/io/jmix/core/impl/MetadataLoader.class]: Failed to instantiate [io.jmix.core.impl.MetadataLoader]: Constructor threw exception

	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:787) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:767) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:145) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:508) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1418) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1443) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:784) ~[spring-beans-6.1.3.jar:6.1.3]
	... 78 common frames omitted
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'core_Metadata' defined in URL [jar:file:/ext/gradle/caches/modules-2/files-2.1/io.jmix.core/jmix-core/2.2.1/f0e02ab73b8296e637a1642b4be6d98b648ce8fd/jmix-core-2.2.1.jar!/io/jmix/core/impl/MetadataImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'core_MetadataLoader' defined in URL [jar:file:/ext/gradle/caches/modules-2/files-2.1/io.jmix.core/jmix-core/2.2.1/f0e02ab73b8296e637a1642b4be6d98b648ce8fd/jmix-core-2.2.1.jar!/io/jmix/core/impl/MetadataLoader.class]: Failed to instantiate [io.jmix.core.impl.MetadataLoader]: Constructor threw exception
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'core_Metadata' defined in URL [jar:file:/ext/gradle/caches/modules-2/files-2.1/io.jmix.core/jmix-core/2.2.1/f0e02ab73b8296e637a1642b4be6d98b648ce8fd/jmix-core-2.2.1.jar!/io/jmix/core/impl/MetadataImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'core_MetadataLoader' defined in URL [jar:file:/ext/gradle/caches/modules-2/files-2.1/io.jmix.core/jmix-core/2.2.1/f0e02ab73b8296e637a1642b4be6d98b648ce8fd/jmix-core-2.2.1.jar!/io/jmix/core/impl/MetadataLoader.class]: Failed to instantiate [io.jmix.core.impl.MetadataLoader]: Constructor threw exception

	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:798) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:237) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1354) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1191) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:561) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1443) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:784) ~[spring-beans-6.1.3.jar:6.1.3]
	... 92 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'core_MetadataLoader' defined in URL [jar:file:/ext/gradle/caches/modules-2/files-2.1/io.jmix.core/jmix-core/2.2.1/f0e02ab73b8296e637a1642b4be6d98b648ce8fd/jmix-core-2.2.1.jar!/io/jmix/core/impl/MetadataLoader.class]: Failed to instantiate [io.jmix.core.impl.MetadataLoader]: Constructor threw exception
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'core_MetadataLoader' defined in URL [jar:file:/ext/gradle/caches/modules-2/files-2.1/io.jmix.core/jmix-core/2.2.1/f0e02ab73b8296e637a1642b4be6d98b648ce8fd/jmix-core-2.2.1.jar!/io/jmix/core/impl/MetadataLoader.class]: Failed to instantiate [io.jmix.core.impl.MetadataLoader]: Constructor threw exception

	at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:318) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:306) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1354) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1191) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:561) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:343) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1443) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:907) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:785) ~[spring-beans-6.1.3.jar:6.1.3]
	... 105 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.jmix.core.impl.MetadataLoader]: Constructor threw exception
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.jmix.core.impl.MetadataLoader]: Constructor threw exception

	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:223) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:111) ~[spring-beans-6.1.3.jar:6.1.3]
	at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:315) ~[spring-beans-6.1.3.jar:6.1.3]
	... 117 common frames omitted
Caused by: java.lang.IllegalStateException: Can't find range class 'com.fasterxml.jackson.databind.JsonNode' for property 'TestEntity.nodes'
Caused by: java.lang.IllegalStateException: Can't find range class 'com.fasterxml.jackson.databind.JsonNode' for property 'TestEntity.nodes'

	at io.jmix.core.impl.MetaModelLoader$RangeInitTask.execute(MetaModelLoader.java:1075) ~[jmix-core-2.2.1.jar:na]
	at io.jmix.core.impl.MetaModelLoader.loadModel(MetaModelLoader.java:145) ~[jmix-core-2.2.1.jar:na]
	at io.jmix.core.impl.MetadataLoader.<init>(MetadataLoader.java:61) ~[jmix-core-2.2.1.jar:na]
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na]
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na]
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na]
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:210) ~[spring-beans-6.1.3.jar:6.1.3]
	... 119 common frames omitted

It’s solved.I miss the dataType class.The full code is here.



import com.fasterxml.jackson.core.JsonProcessingException
import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.databind.ObjectMapper
import jakarta.persistence.AttributeConverter
import jakarta.persistence.Converter

@Converter(autoApply = true)
class JsonNodeConverter : AttributeConverter<JsonNode?, String?> {
    override fun convertToDatabaseColumn(jsonNode: JsonNode?): String? {
        if(jsonNode==null) return null
        try {
            return objectMapper.writeValueAsString(jsonNode)
        } catch (e: JsonProcessingException) {
            throw RuntimeException(e)
        }
    }

    override fun convertToEntityAttribute(s: String?): JsonNode? {
        if(s == null)return null
        try {
            return objectMapper.readTree(s)
        } catch (e: JsonProcessingException) {
            throw RuntimeException(e)
        }
    }

    companion object {
        private val objectMapper: ObjectMapper = ObjectMapper()
    }
}
import com.fasterxml.jackson.core.JsonProcessingException
import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.databind.ObjectMapper
import io.jmix.core.metamodel.annotation.DatatypeDef
import io.jmix.core.metamodel.annotation.Ddl
import io.jmix.core.metamodel.datatype.Datatype
import org.springframework.lang.Nullable
import java.util.*

@DatatypeDef(
    id = "jsonNode",
    defaultForClass = true,
    javaClass = JsonNode::class,
)
@Ddl("CLOB")
class JsonNodeDataType : Datatype<JsonNode?> {
    companion object {
        private val objectMapper: ObjectMapper = ObjectMapper()
    }

    override fun format(@Nullable value: Any?): String? {
        if (value == null) return null
        try {
            return objectMapper.writeValueAsString(value)
        } catch (e: JsonProcessingException) {
            throw RuntimeException(e)
        }
    }

    override fun format(@Nullable value: Any?, locale: Locale): String? {
        return format(value)
    }

    override fun parse(value: String?): JsonNode? {
        if (value == null) return null
        try {
            return objectMapper.readTree(value)
        } catch (e: JsonProcessingException) {
            throw RuntimeException(e)
        }
    }

    override fun parse(value: String?, locale: Locale): JsonNode? {
        return parse(value)
    }
}
@JmixEntity
@Table(name = "TEST_ENTITY", indexes = [
    Index(name = "IDX_TEST_ENTITY_UNQ", columnList = "CODE", unique = true)
])
@Entity
open class TestEntity {
    @JmixGeneratedValue
    @Column(name = "ID", nullable = false)
    @Id
    var id: UUID? = null

    @Column(name = "CODE")
    var code: String? = null

    @InstanceName
    @Column(name = "NAME")
    var name: String? = null
/* ... */
    @Column(name = "NODES")
    @Lob
    @Convert // I don't know why I don't add this,my IDEA told me an error.
// @Convert( converter = JsonNodeConverter::class)
    var nodes: JsonNode? = null
}
1 Like