2017-01-09 38 views
0

我正在拧一些我在Karaf下部署的代码。 我想保存一个简单的POJO对象到表中。卡拉夫 - 坚持一个简单的POJO时的例外

我得到下面的例外。

此reportRequestID是PK领域,我认为它有适当的注释。

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "ReportRequestID", unique = true, nullable = false) 
public Integer getReportRequestID() { 
    return reportRequestID; 
} 

public void setReportRequestID(Integer reportRequestID) { 
    this.reportRequestID = reportRequestID; 
} 

数据库表没有外键。我说这是因为我看到堆栈跟踪有这个ForeignKeys.isTransient,我觉得很奇怪。

所以我不知道这里有什么问题。我尝试了谷歌搜索这个错误,我发现很多点击,但我没有找到任何与我的用例有关的东西。

任何帮助将不胜感激。

javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.hibu.microservices.dataaccess.sql.bean.KeywordReportQueue.reportRequestID 
      at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763) 
      at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677) 
      at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683) 
      at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1187) 
      at com.hibu.microservices.dataaccess.sql.dao.KeywordReportQueueDao.insertCustomerGoogleReportRequest2(KeywordReportQueueDao.java:118) 
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
      at java.lang.reflect.Method.invoke(Method.java:498) 
      at org.apache.aries.proxy.impl.ProxyHandler$1.invoke(ProxyHandler.java:54) 
      at org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:119) 
      at com.hibu.microservices.dataaccess.sql.dao.$KeywordReportQueueDao1640762817.insertCustomerGoogleReportRequest2(Unknown Source) 
      at com.hibu.microservices.impl.customer.CustomerGenerateGoogleReportServiceImpl.requestReport(CustomerGenerateGoogleReportServiceImpl.java:31) 
      at com.hibu.microservices.impl.customer.CustomerGenerateGoogleReportServiceImpl.generateReport(CustomerGenerateGoogleReportServiceImpl.java:54) 
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
      at java.lang.reflect.Method.invoke(Method.java:498) 
      at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:181) 
      at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:97) 
      at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:200) 
      at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:99) 
      at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59) 
      at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:96) 
      at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307) 
      at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) 
      at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:251) 
      at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234) 
      at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208) 
      at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160) 
      at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171) 
      at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:293) 
      at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:212) 
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 
      at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:268) 
      at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812) 
      at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587) 
      at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71) 
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
      at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) 
      at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) 
      at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) 
      at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:287) 
      at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) 
      at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) 
      at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) 
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
      at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80) 
      at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
      at org.eclipse.jetty.server.Server.handle(Server.java:499) 
      at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311) 
      at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) 
      at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544) 
      at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) 
      at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) 
      at java.lang.Thread.run(Thread.java:745) 
    Caused by: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.hibu.microservices.dataaccess.sql.bean.KeywordReportQueue.reportRequestID 
      at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:192) 
      at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:346) 
      at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4746) 
      at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:4465) 
      at org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:243) 
      at org.hibernate.event.internal.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:511) 
      at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:116) 
      at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:75) 
      at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:811) 
      at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:784) 
      at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:789) 
      at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1181) 
      ... 52 more 
    Caused by: java.lang.IllegalArgumentException: [email protected] 
      at sun.reflect.GeneratedMethodAccessor55.invoke(Unknown Source) 
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
      at java.lang.reflect.Method.invoke(Method.java:498) 
      at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:169) 
      ... 63 more 

在我的karaf.log文件中,我也看到了这一点。

java.lang.ClassNotFoundException: Unable to load class 'org.hibernate.proxy.HibernateProxy' because the bundle wiring for com.hibu.microservices.data-access is no longer valid. 

我不知道它是否相关或如何解决它。

+0

这一个接近我的情况,但我不明白他们在那里的建议(关于类装载机)。我看不到一个被接受的答案。 http://stackoverflow.com/questions/23381832/stuck-on-a-classcastexception-with-hibernate-but-only-occasionally-on-tomcat –

+0

一些提示:用于Method.invoke()的Javadocs声明它如果指定的对象参数不是声明基础方法的类或接口的实例“(和其他不适用的情况),则抛出'IllegalArgumentException * *”。这听起来很像一个类路径问题。仔细检查你的配置,确保'KeywordReportQueue'没有通过2个类加载器加载!例如。确保它在启动时和OSGi包都不可用。 –

+0

@NikosParaskevopoulos我不确定要检查什么。我几天前开始与Karaf合作。 KeywordReportQueue是一个数据访问项目的一部分,在Karaf中作为一个捆绑包安装。然后,我们从另一个包中使用它。我没有看到KeywordReportQueue会出现两次的原因。如果你给我更精确的指示,我会检查它们。 –

回答

0

我刚刚通过改变hibernate的方言值来解决这个问题。

<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> 

<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect"/> 

请注意,我使用SQL Server 2008数据库。