我在PostgreSQL 9.6中有一个类型为&#34的列;字符变化[]"这本质上是一个字符串数组。我使用Dropwizard和Hibernate来处理数据库连接。通常我只需要提供一个注释来定义数据类型,但是,Hibernate抱怨varchar []类型的反序列化。如何将其映射到Java中的List?
我已经尝试实现我自己的UserType扩展类来处理(de)序列化而没有运气。任何帮助都将非常感激。
我看了@Waqas发布的这个link,我至少能够创建一个扩展UserType的类型,以实现Java中varchar []到String []的映射。
我的实施中存在一些差异:
nullSafeSet()
和nullSafeGet()
方法(@Override)中,我不得不使用SharedSessionContractImplementor
中名为org.hibernate.engine.spi
的(更新?)类(较旧的?)班级SessionImplementor
。HibernateBundle
类没有效果(以下错误)。即使maven构建jar没有任何问题,我只在我的机器上安装了Java 1.8(OpenSuse)。附:我正在使用Dropwizard 1.2,我直接从他们的文档中声明了HibernateBundle
。不过,我删除了@Override注释,现在可以正常工作了。不知道为什么,或者如何,但确实如此。承诺错误:
INFO [2017-11-08 22:39:06,220] org.eclipse.jetty.util.log: Logging initialized @1137ms to org.eclipse.jetty.util.log.Slf4jLog
INFO [2017-11-08 22:39:06,310] io.dropwizard.server.DefaultServerFactory: Registering jersey handler with root path prefix: /
INFO [2017-11-08 22:39:06,312] io.dropwizard.server.DefaultServerFactory: Registering admin handler with root path prefix: /
java.lang.Error: Unresolved compilation problem:
The method getDataSourceFactory(ApplicationConfiguration) of type new HibernateBundle<ApplicationConfiguration>(){} must override a superclass method
at com.tksoft.food.Application$1.getDataSourceFactory(Application.java:24)
at com.tksoft.food.Application$1.getDataSourceFactory(Application.java:1)
at io.dropwizard.hibernate.HibernateBundle.run(HibernateBundle.java:61)
at io.dropwizard.hibernate.HibernateBundle.run(HibernateBundle.java:15)
at io.dropwizard.setup.Bootstrap.run(Bootstrap.java:200)
at io.dropwizard.cli.EnvironmentCommand.run(EnvironmentCommand.java:42)
at io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:85)
at io.dropwizard.cli.Cli.run(Cli.java:75)
at io.dropwizard.Application.run(Application.java:93)
at com.tksoft.food.Application.main(Application.java:30)
任何方式,这让我感到非常困惑,但它正在工作,所以我很高兴:)(现在)。我只需要弄清楚我是否可以将它映射到List而不是数组:/