如何使用Hibernate将PostgreSQL varchar [](数组列)映射到Java中的List <string>?

时间:2017-11-08 02:24:26

标签: java postgresql hibernate jpa

我在PostgreSQL 9.6中有一个类型为&#34的列;字符变化[]&#34;这本质上是一个字符串数组。我使用Dropwizard和Hibernate来处理数据库连接。通常我只需要提供一个注释来定义数据类型,但是,Hibernate抱怨varchar []类型的反序列化。如何将其映射到Java中的List?

我已经尝试实现我自己的UserType扩展类来处理(de)序列化而没有运气。任何帮助都将非常感激。

更新:

我看了@Waqas发布的这个link,我至少能够创建一个扩展UserType的类型,以实现Java中varchar []到String []的映射。

我的实施中存在一些差异:

  • 在需要实施的nullSafeSet()nullSafeGet()方法(@Override)中,我不得不使用SharedSessionContractImplementor中名为org.hibernate.engine.spi的(更新?)类(较旧的?)班级SessionImplementor
  • 当我实现此更改并将@Type注释添加到我的列映射(在我的实体数据类中)时,我的运行时抱怨@Override显然对某个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而不是数组:/

0 个答案:

没有答案