2013-09-28 82 views
0

Welecome,我很新的休眠和我有問題。 上面我插入代碼示例。 訂單應該包含2個主鍵id(own.auto generated pk)和其他客戶端的客戶端的pk(也可以作爲客戶端表中的fk)id。一切都正常工作,只是當我加入@GeneratedValue(strategy=GenerationType.AUTO)我 正在歌廳以上errrors:休眠,主鍵包括自動生成的ID和外鍵作爲pk

org.hibernate.PropertyAccessException: could not set a field value by reflection setter of pl.pb.intern.test.model.Order.id 
    at org.hibernate.property.DirectPropertyAccessor$DirectSetter.set(DirectPropertyAccessor.java:151) 
    at org.hibernate.mapping.Component$ValueGenerationPlan.execute(Component.java:423) 
    at org.hibernate.id.CompositeNestedGeneratedValueGenerator.generate(CompositeNestedGeneratedValueGenerator.java:121) 
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:117) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:206) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:191) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) 
    at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:735) 
    at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:727) 
    at org.hibernate.engine.spi.CascadingAction$5.cascade(CascadingAction.java:258) 
    at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:388) 
    at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:331) 
    at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:209) 
    at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:418) 
    at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:358) 
    at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:334) 
    at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:209) 
    at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:166) 
    at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:132) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:364) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:338) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:241) 
    at org.hibernate.event.internal.DefaultUpdateEventListener.performSaveOrUpdate(DefaultUpdateEventListener.java:55) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) 
    at org.hibernate.internal.SessionImpl.fireUpdate(SessionImpl.java:786) 
    at org.hibernate.internal.SessionImpl.update(SessionImpl.java:778) 
    at org.hibernate.internal.SessionImpl.update(SessionImpl.java:774) 
    at pl.pb.intern.test.dao.HibernateClientDAO.updateClient(HibernateClientDAO.java:34) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 


Caused by: java.lang.IllegalArgumentException: Can not set long field pl.pb.intern.test.model.Order.id to org.hibernate.id.IdentifierGeneratorHelper$2 
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source) 
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source) 
    at sun.reflect.UnsafeLongFieldAccessorImpl.set(Unknown Source) 
    at java.lang.reflect.Field.set(Unknown Source) 
    at org.hibernate.property.DirectPropertyAccessor$DirectSetter.set(DirectPropertyAccessor.java:139) 
    ... 67 more 

我的實體:

@Entity 
    public class Client 
    { 
    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    int id; 

    @OnetoMany(mappedBy="client", cascade=CascadeType.ALL , fetch=FetchType.EAGER,orphanRemoval=true) 
    List<Order> orders 
    //other fields 


    } 

    @Enitity 
    public classs Order 
    { 
     @Id 
     @GeneratedValue(strategy=GenerationType.AUTO) 
     int id; 

     @Id 
     @ManyToOne 
     @JoinColumn(name="order_client_id",insertable=false, updatable=false) 
     Client client; 

      public void setId(long id) 
      { 
      this.id=id 
      } 

      public login getId() 
     { 
      return this.id; 
     } 
    } 



    } 

我已經審查休眠文件和餘did't找到針對汽車連接任何禁忌症生成的主鍵和外鍵爲pk。這個例子中做錯了什麼?

回答

0

在複合主鍵的問題,請參見JPA composite primary key

從異常堆棧跟蹤,似乎你的Order.getId()/Order.setId()有錯誤簽名的方法簽名。根據JavaBean慣例,由於Order.idint,因此setId()應該取int參數,而getId()應該返回int。或者,您可以將Order.id的類型更改爲long,因爲getId()/setId()已經使用long

此外,您可能希望編輯您的代碼來解決以下錯別字和語法錯誤: Client.java: - @OnetoMany應該是@OneToMany - 缺少結束行分號上List<Order> orders Order.java - 缺少末尾分號this.id = idOrder.setId