2015-01-04 2 views
4

Я следующий объект:javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: не удалось получить значение поля с помощью отражения добытчик Entity.id

@Entity 
public class Employee implements Serializable{ 
    private static final long serialVersionUID = 3454567L; 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private int empId; 

    @Column 
    private String username; 

    public int getEmpId() { 
     return empId; 
    } 

    public void setEmpId(int empId) { 
     this.empId = empId; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 
} 

И следующий EJB:

public class UserDAO implements UserDAOInterface{ 

    @PersistenceContext(unitName = "MainPersistenceUnit") 
    private EntityManager em; 

    @Override 
    public void persist(Employee sdf) { 
     try { 
      em.persist(sdf); 
     } catch (Exception e) { 
      Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e); 
      throw new RuntimeException(e); 
     } 
    } 
} 

Когда не проходят называются, исключение со следующей первопричиной брошен:

Caused by: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.mine.projs.library.entity.Employee.empId 
    at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:60) 
    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) 
    ... 100 more 

Вот полный журнал от GlassFish 4.1:

Info: HHH000204: Processing PersistenceUnitInfo [ 
    name: MainPersistenceUnit 
    ...] 
Info: HHH000412: Hibernate Core {4.3.7.Final} 
Info: HHH000206: hibernate.properties not found 
Info: HHH000021: Bytecode provider name : javassist 
Info: HCANN000001: Hibernate Commons Annotations {4.0.5.Final} 
Info: HHH000400: Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect 
Info: HHH000397: Using ASTQueryTranslatorFactory 
Info: HHH000227: Running hbm2ddl schema export 
Info: Hibernate: drop table if exists Employee 
Info: Hibernate: create table Employee (empId integer not null auto_increment, username varchar(255), primary key (empId)) ENGINE=InnoDB 
Info: HHH000230: Schema export complete 
Info: Portable JNDI names for EJB UserService: [java:global/Library/UserService, java:global/Library/UserService!com.mine.projs.library.service.interfaces.UserServiceInterface] 
WARN: WELD-000411: Observer method [BackedAnnotatedMethod] private org.glassfish.jersey.gf.cdi.internal.CdiComponentProvider.processAnnotatedType(@Observes ProcessAnnotatedType<Object>) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds. 
WARN: WELD-000411: Observer method [BackedAnnotatedMethod] public org.glassfish.jms.injection.JMSCDIExtension.processAnnotatedType(@Observes ProcessAnnotatedType<Object>) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds. 
WARN: WELD-000411: Observer method [BackedAnnotatedMethod] org.glassfish.sse.impl.ServerSentEventCdiExtension.processAnnotatedType(@Observes ProcessAnnotatedType<Object>, BeanManager) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds. 
Info: Initializing Mojarra 2.2.7 (20140610-1547 https://svn.java.net/svn/mojarra~svn/tags/[email protected]) for context '/libr' 
Info: Running on PrimeFaces 5.1 
Info: Loading application [Library] at [/libr] 
Info: Library was successfully deployed in 3,429 milliseconds. 
Info: inside getAna 
Info: inside Create User 
Severe: exception caught 
javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.mine.projs.library.entity.Employee.empId 
    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.sun.enterprise.container.common.impl.EntityManagerWrapper.persist(EntityManagerWrapper.java:287) 
    at com.mine.projs.library.dao.UserDAO.persist(UserDAO.java:20) 
    at com.mine.projs.library.service.UserService.createUSer(UserService.java:21) 
    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:483) 
    at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1081) 
    at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1153) 
    at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:4786) 
    at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:656) 
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) 
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608) 
    at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:46) 
    at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52) 
    at sun.reflect.GeneratedMethodAccessor103.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) 
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) 
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608) 
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163) 
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:140) 
    at sun.reflect.GeneratedMethodAccessor151.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) 
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) 
    at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:369) 
    at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:4758) 
    at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4746) 
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212) 
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88) 
    at com.sun.proxy.$Proxy321.createUSer(Unknown Source) 
    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:483) 
    at org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(Reflections.java:414) 
    at org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:127) 
    at org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(EnterpriseTargetBeanInstance.java:56) 
    at org.jboss.weld.bean.proxy.InjectionPointPropagatingEnterpriseTargetBeanInstance.invoke(InjectionPointPropagatingEnterpriseTargetBeanInstance.java:65) 
    at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:100) 
    at com.mine.projs.library.service.UserServiceInterface$243194531$Proxy$_$$_Weld$EnterpriseProxy$.createUSer(Unknown Source) 
    at com.mine.projs.library.view.UserBean.getAna(UserBean.java:29) 
    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:483) 
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:363) 
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) 
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) 
    at com.sun.el.parser.AstValue.getValue(AstValue.java:140) 
    at com.sun.el.parser.AstValue.getValue(AstValue.java:204) 
    at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:226) 
    at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50) 
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) 
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) 
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) 
    at javax.faces.component.UICommand.getValue(UICommand.java:218) 
    at com.sun.faces.renderkit.html_basic.ButtonRenderer.encodeBegin(ButtonRenderer.java:119) 
    at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:864) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1854) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) 
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:456) 
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133) 
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337) 
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) 
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) 
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175) 
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561) 
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.mine.projs.library.entity.Employee.empId 
    at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:60) 
    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) 
    ... 100 more 

Как это вызвано и как я могу его решить?

+0

На стороне примечания класс Employee не имеет аннотации к таблице, но это не должно быть основной причиной. Существуют ли какие-либо другие объекты jpa, которые включают отображение класса Employee? –

+0

Эта строка в предоставленном StackTrace: 'org.hibernate.PropertyAccessException: не удалось получить значение поля путем отражения getter' в основном подразумевает некоторые проблемы с отображением между ассоциациями между объектами. Таким образом, основная причина в основном состоит только в Hibernate/JPA, остальные те теги-теги - только поддельные теги. Более того, эти ассоциации невидимы в соответствии с текущим статусом вопроса. Вам лучше отделить точную проблемную область, удаляющую весь шум JSF, чтобы привлечь специалистов Hibernate/JPA и получить лучшую помощь раньше. – Tiny

+0

Вы можете попробовать, изменив GenerationType.AUTO на GenerationType.IDENTITY –

ответ

4

У меня такая же проблема. Эта ошибка, похоже, началась с HB 4.3.6 и выжила, я стараюсь 4.3.10; с теми же результатами.

Мне кажется, что путь доступа объектов к объектам изменен в HB 4.3.6+, вероятно, связан с загрузчиком классов. До HB 4.3.6 вложение файла jar-файла драйвера в файл уха работает отлично (очень просто и просто для развертывания). После 4.3.6 он не работает (с классом, не найденным исключением), теперь файл jar драйвера должен быть помещен в папку lib из Glassfish.

Хуан

+2

Просто нашел решение. Посмотрите https://hibernate.atlassian.net/browse/HHH-9446. Добавьте hibernate.classloading.use_current_tccl_as_parent = false в файл hibernate.properties или файл persistence.xml. – jfarjona

+0

@ jfarjona OMG ты - ЧЕЛОВЕК! Я потратил 10 часов на поиски решения для этого. Можете ли вы объяснить, что он делает? – Greyshack

-3

Ваш класс должен иметь поля, отображенные в столбец таблицы с помощью аннотаций как

@Entity 
@Table(name="employee") 
public class Employee implements Serializable{ 
    private static final long serialVersionUID = 3454567L; 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @cloumn(name="emp_id") 
    private int empId; 

    @Column(name="user_name") 
    private String username; 

    public int getEmpId() { 
     return empId; 
    } 

    public void setEmpId(int empId) { 
     this.empId = empId; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 
} 
+0

Я пробовал это без везения. В таблице нет проблем с созданием в базе данных. Исключение возникает при сохранении. – Abdulrahman

0

Это может быть проблема с Hibernate.

Следующее исключение возникает при попытке сохранить новый объект «Продукт» (см. Тестовый пример) с помощью Hibernate 4.3.6.FINAL. Тем не менее, он отлично работает, если я изменю зависимость maven до 4.3.5.FINAL, не касаясь какой-либо другой части кода.

От Hibernate issue tracker

Так что я предлагаю изменения версии библиотеки Hibernate 4.3.5. У меня была такая же проблема, и я ее исправил.

1

, которые приходят от вопроса загрузчика, когда спящий режим загрузки начального класса на развертывании, фиктивная ClassLoader создана для создания каталога. Когда вы находитесь во время выполнения, класс в каталоге не имеет одного и того же загрузчика классов, а метод sun.reflect.UnsafeFieldAccessorImpl.ensureObj не выполнен.

protected void ensureObj(Object obj) 
{ 
    if(!field.getDeclaringClass().isAssignableFrom(obj.getClass())) 
    { 
     throwSetIllegalArgumentException(obj); 
    } 
} 

Этот метод вызывается из DirectPropertyAccessor $ DirectGetter.get (Object) линии: 57

я решить проблему в GlassFish 4.1 и зимовать-EntityManager-4.3.11.Final.jar путем создания пользовательского jpa provider, который прикрепляет правильный загрузчик классов.

package org.hibernate.jpa; 

import java.lang.reflect.InvocationHandler; 
import java.lang.reflect.Method; 
import java.lang.reflect.Proxy; 
import java.util.Map; 

import javax.persistence.EntityManagerFactory; 
import javax.persistence.spi.PersistenceUnitInfo; 

import org.hibernate.jpa.HibernatePersistenceProvider; 

/** 
* Lazy HibernatePersistenceProvider whose take Thread class loader as source 
* and not the dummy one 
* 
* @author Alexandre Heroux 
* 
*/ 
public class LazyHibernatePersistenceProvider extends HibernatePersistenceProvider { 
    @SuppressWarnings("rawtypes") 
    @Override 
    public EntityManagerFactory createContainerEntityManagerFactory(final PersistenceUnitInfo info, 
      final Map properties) { 
     return (EntityManagerFactory) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), 
       new Class[] { EntityManagerFactory.class }, new InvocationHandler() { 
        private EntityManagerFactory entityManagerFactory = null; 

        @Override 
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 
         return method.invoke(getEntityManagerFactory(info, properties), args); 
        } 

        /** 
        * Create the EntityManagerFactory when is not exists 
        * 
        * @param info 
        * @param properties 
        * @return 
        */ 
        protected EntityManagerFactory getEntityManagerFactory(PersistenceUnitInfo info, Map properties) { 
         if (entityManagerFactory == null) { 
          synchronized (this) { 
           if (entityManagerFactory == null) { 
            entityManagerFactory = LazyHibernatePersistenceProvider.this 
              .createParentContainerEntityManagerFactory(info, properties); 
           } 
          } 
         } 
         return entityManagerFactory; 
        } 
       }); 
    } 

    /** 
    * Call parent method 
    * 
    * @param info 
    * @param properties 
    * @return 
    */ 
    protected EntityManagerFactory createParentContainerEntityManagerFactory(PersistenceUnitInfo info, Map properties) { 
     return super.createContainerEntityManagerFactory(info, properties); 
    } 
} 
Смежные вопросы