2012-06-11 2 views
1

Я боюсь с помощью простого спящего режима. (JBoss AS 7.1.1, Hibernate 4.1)Simple Hibernate Приложение не работает: PropertyAccessException: не удалось получить значение поля путем отражения getter

Моя сущность боб:

@Entity 
public class User implements Serializable { 

    @Id 
    private Long userId; 

    public Long getUserId() { 
    return userId; 
    } 

    public void setUserId(Long userId) { 
     this.userId = userId; 
    } 
} 

Мой persistence.xml:

<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
version="2.0"> 
<persistence-unit name="users" transaction-type="JTA"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>java:jboss/datasources/myDS</jta-data-source> 
    <jar-file>users.jar</jar-file> 
    <class>de.test.users.entities.User</class> 
    <properties> 
     <property name="hibernate.hbm2ddl.auto" value="update" /> 
     <property name="hibernate.archive.autodetection" value="class" /> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> 
     <property name="hibernate.show_sql" value="true" /> 
    </properties> 
</persistence-unit> 

Мой простой DAO боб:

@Stateless 
public class UserManagerBean implements UserManager { 

    @PersistenceContext(name = "users") 
    private EntityManager em; 

    public UserManagerBean() { 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void createUser() { 
     User user = new User(); 
      user.setUserId(42L); 
    em.persist(user); 
    em.flush(); 
    } 
} 

Я вызываю createUse r методом EJB-инъекции UserManagerBean в компоненте поддержки JSF. Когда вызывается метод persist, я получаю следующее:

javax.faces.el.EvaluationException: javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of de.test.users.entities.User.userId 
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102) 
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) 
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) 
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) 
at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) 
at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) 
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) 
at java.lang.Thread.run(Thread.java:722) 
Caused by: javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of de.test.users.entities.User.userId 
at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:166) 
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:230) 
at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:304) 
at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:190) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:32) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
at org.jboss.as.ee.component.TCCLInterceptor.processInvocation(TCCLInterceptor.java:45) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) 
at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:165) 
at org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:173) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) 
at org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:72) 
at de.test.users.service.UserManager$$$view1.createUser(Unknown Source) 
at de.test.users.User.createUser(User.java:17) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:601) 
at org.apache.el.parser.AstValue.invoke(AstValue.java:262) 
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) 
at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:39) 
at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50) 
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) 
... 25 more 
Caused by: javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of de.test.users.entities.User.userId 
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1361) 
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1289) 
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1295) 
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:859) 
at org.jboss.as.jpa.container.AbstractEntityManager.persist(AbstractEntityManager.java:563) 
at de.test.users.service.UserManagerBean.createUser(UserManagerBean.java:31) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:601) 
at org.jboss.as.ee.component.ManagedReferenceMethodInterceptorFactory$ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptorFactory.java:72) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:374) 
at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:127) 
at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:135) 
at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:36) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) 
at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:36) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
at org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
at org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:82) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) 
at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:53) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
at org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51) 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:228) 
... 56 more 
Caused by: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of de.test.users.entities.User.userId 
at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:61) 
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:341) 
at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4260) 
at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3982) 
at org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:209) 
at org.hibernate.event.internal.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:509) 
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:118) 
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:78) 
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:725) 
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:701) 
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:705) 
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:853) 
... 84 more 
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field de.test.users.entities.User.userId to de.test.users.entities.User 
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164) 
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168) 
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:55) 
at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36) 
at java.lang.reflect.Field.get(Field.java:372) 
at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:58) 
... 95 more 

Любая идея, как я мог это решить? Кстати, кажется, что hibernate не может автоматически определять классы в файле jar. Когда я удаляю элемент класса из persistence.xml, журнал сообщает мне, что hibernate не загружал никаких объектов для единицы сохранения «пользователей». Возможно, что-то связано с исключением?

Моя структура проекта выглядит более или менее похоже, что:

project-ear 
|-- lib 
|-- META-INF 
| | 
| |-- maven 
| |-- persistence.xml 
| |-- application.xml 
| 
|-- users.jar 
| 
|-- users.war 

ответ

4

Я смог решить проблему самостоятельно. Я видел, что user.jar, содержащий компонент сущности, был фактически дублирован Maven. Он был помещен в папку lib пользователя user.war, а также в корневую папку lib в пакете уха. Я удалил его из папки lib военного пакета, и все, включая автоматическое обнаружение класса Hibernate, работает так, как ожидается сейчас.

+0

Вы спасатель жизни. спасибо за сохранение. –

0

Что такое тип данных идентификатором пользователя? Эта часть ошибки:

Can not set java.lang.String field de.test.users.entities.User.userId to  
    de.test.users.entities.User 

заставляет меня верить, что это VARCHAR или текст а. Попытка:

@Id 
private String userId; 

Если это так.

+0

У меня было что-то перепутано в сущности. Но это не остановило исключение. – dws

+0

Теперь у вас должно быть новое исключение, верно? Вы еще не можете установить исключение String. – stevedbrown

+0

Правильно, я обновляю трассировку стека позже! – dws

Смежные вопросы