【问题标题】:Hibernate 4.3.6 Glassfish 4 UserType IssueHibernate 4.3.6 Glassfish 4 用户类型问题
【发布时间】:2014-08-31 16:18:47
【问题描述】:

我正在迁移我的应用程序,在 GlassFish 3.0.1 到 Glassfish 4.0 上运行良好,并将 Hibernate 从 3.6 更新到 4.0。在经历了很多迁移问题之后,我陷入了这个困境:

该应用程序有几个org.hibernate.usertype.UserType 实现。我知道nullSafeGetnullSafeSet 已被弃用。已经纠正了所有这些,因此代码可以正常编译。部署时出现问题。

在部署时(一开始)我收到以下异常:

2014-08-31T12:43:22.312-0300|SEVERE: Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method
2014-08-31T12:43:22.313-0300|SEVERE: javax.persistence.PersistenceException: [PersistenceUnit: FOOEJB3DS] Unable to build Hibernate SessionFactory
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1225)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.access$600(EntityManagerFactoryBuilderImpl.java:119)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:853)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843)
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842)
    at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152)
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:67)
    at org.glassfish.persistence.jpa.PersistenceUnitLoader.loadPU(PersistenceUnitLoader.java:199)
    at org.glassfish.persistence.jpa.PersistenceUnitLoader.<init>(PersistenceUnitLoader.java:107)
    at org.glassfish.persistence.jpa.JPADeployer$1.visitPUD(JPADeployer.java:223)
    at org.glassfish.persistence.jpa.JPADeployer$PersistenceUnitDescriptorIterator.iteratePUDs(JPADeployer.java:510)
    at org.glassfish.persistence.jpa.JPADeployer.createEMFs(JPADeployer.java:230)
    at org.glassfish.persistence.jpa.JPADeployer.prepare(JPADeployer.java:168)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.prepareModule(ApplicationLifecycle.java:922)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:431)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:527)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:523)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:356)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:522)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:546)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1423)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1500(CommandRunnerImpl.java:108)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1762)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1674)
    at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534)
    at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224)
    at org.glassfish.grizzly.http.server.StaticHttpHandler.service(StaticHttpHandler.java:297)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:246)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)
    at java.lang.Thread.run(Thread.java:722)
Caused by: org.hibernate.MappingException: Could not determine type for: br.com.MeasureUnitType, at table: item_itemcodes, for columns: [org.hibernate.mapping.Column(measureunit)]
    at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:336)
    at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:310)
    at org.hibernate.mapping.Property.isValid(Property.java:241)
    at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:496)
    at org.hibernate.mapping.RootClass.validate(RootClass.java:270)
    at org.hibernate.cfg.Configuration.validate(Configuration.java:1358)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1849)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
    ... 46 more

分析初始异常Caused by: org.hibernate.MappingException: Could not determine type for: br.com.foo.MeasureUnitType, at table: item_itemcodes, for columns: [org.hibernate.mapping.Column(measureunit)] 我可以假设我的用户类型有问题。所有定义都与之前的 GlassFish + Hibernate 一样。

找不到与此相关的迁移步骤的任何信息(除了前面提到的已弃用的方法)。可以在 Hibernate 文档TypeCustomTypeDoc 上阅读有关自定义类型注册的内容。但是,如果我做对了,如果我希望它成为默认值,我只需要注册即可。在我的情况下,我声明只在我的 @Entity 类中使用 @TypeDef@Type

我的代码如下:

public class MeasureUnitType implements UserType {
    ... //Full Interface IMplementation (and working on previous environment)
}

我的实体类:

@Entity
@Table(name = "item_itemcodes")
@TypeDef(name = "measureUnitType", typeClass = MeasureUnitType.class)
public class ItemCodeVO extends FOODefaultVO {
  ...
  @Type(type = "measureUnitType")
  private MEASUREUNIT measureunit = null;
  ...
}

非常感谢任何启发!

谢谢(请随时纠正我的英文,使其更容易理解)

【问题讨论】:

    标签: hibernate jpa glassfish hibernate-mapping glassfish-4


    【解决方案1】:

    只是为了不让它没有任何答案,我从未找到解决该错误的方法。我解决了删除 Hibernate 并迁移到 Glassfish 4.0 上内置的 EclipseLink 的问题。

    现在快一年了,经过一点代码调整(真的很少),一切正常。如果您使用的是 Glassfish 4.0,我建议您也进行迁移。

    EclipseLink 仅使用 100% JPA 注释。甚至没有一个特定的代码自定义。

    不是一个解决方案,但希望这个小费值得一游。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 2014-04-29
      • 2011-07-27
      • 2014-11-17
      • 2015-12-18
      • 1970-01-01
      • 2014-11-04
      相关资源
      最近更新 更多