2016-02-19 97 views
0

的實例,我有一個非常簡單的實體:休眠 - 對象不聲明

import javax.persistence.*; 

@Entity(name = "Message") 
public class MessageEntity { 

    private Long id; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    public Long getId() { 
     return this.id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 
} 

的persistence.xml包含hibernate.hbm2ddl.auto=create-drop,所以表中創建的基礎上正確的註釋。不過,當我堅持的實體,我得到以下異常:

org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of org.acme.project.MessageEntity.id 
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:192) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:346) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4746) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:4465) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:243) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.event.internal.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:511) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:116) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:75) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:811) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:784) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:789) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1181) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final] 
... 154 more 
Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_20] 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_20] 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_20] 
at java.lang.reflect.Method.invoke(Method.java:483) [rt.jar:1.8.0_20] 
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:169) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
... 165 more 

或者當字段註釋,而不是吸氣:

org.hibernate.PropertyAccessException: could not get a field value by reflection getter of org.acme.project.MessageEntity.id 
at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:60) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:346) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4746) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:4465) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:243) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.event.internal.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:511) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:116) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:75) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:811) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:784) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:789) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1181) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final] 
... 154 more 
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field org.acme.project.MessageEntity.id to org.acme.project.MessageEntity 
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167) [rt.jar:1.8.0_20] 
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171) [rt.jar:1.8.0_20] 
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:58) [rt.jar:1.8.0_20] 
at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36) [rt.jar:1.8.0_20] 
at java.lang.reflect.Field.get(Field.java:387) [rt.jar:1.8.0_20] 
at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:57) [hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
... 165 more 

產生異常的代碼是非常複雜的,所以採取了此刻真正得到它:

@PersistenceContext 
private EntityManager em; 

public void doMagic() { 
    this.em.persist(new MessageEntity()); 
} 

這可能是一個小的,非常愚蠢的錯誤,使休眠認爲它應該的ID設置爲MessageEntity,但我看不到找到它在哪裏。有什麼問題?

+0

向我們展示實體的完整代碼以及引發該異常的代碼。 –

+0

@JBNizet我添加了getter和setter。 –

+0

您完全更改了代碼,其中包含其他幾個字段,關於構建器模式的註釋以及SequenceGenerator。你是否仍然獲得與上述實體相同的異常,包含單個id字段和身份生成器? –

回答

0

好的,這個例外根本無法解決問題的原因。我在EAR內部有一個WAR,並且WAR有EAR內庫的重複。所以在內部可能有ClassCastException或其他東西,因爲WAR中的對象不能被EAR內的bean使用。