Expected type: java.lang.Integer, actual value: org.hibernate.id.IdentifierGeneratorHelper$2

匿名 (未验证) 提交于 2019-12-03 01:00:01

问题:

i have this error in my code when i m trying to call save method this method is woking fine while i m on JBoss server , now i move on tomcat server 7

ERROR: HHH000123: IllegalArgumentException in class:     com.sb.core.beans.CompanyStudies,setter method of property: studyId Aug 5, 2013 9:24:52 AM org.hibernate.property.BasicPropertyAccessor$BasicSetter set ERROR: HHH000091: Expected type: java.lang.Integer, actual value:     org.hibernate.id.IdentifierGeneratorHelper$2 org.hibernate.PropertyAccessException: IllegalArgumentException occurred while          calling setter of com.sb.core.beans.CompanyStudies.studyId at   org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:119) at org.hibernate.mapping.Component$ValueGenerationPlan.execute(Component.java:436) at org.hibernate.id.CompositeNestedGeneratedValueGenerator.generate(CompositeNestedGeneratedValueGenerator.java:121) at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:120) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204) at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189) at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:642) at org.hibernate.internal.SessionImpl.save(SessionImpl.java:635) at org.hibernate.internal.SessionImpl.save(SessionImpl.java:631) at com.sb.core.dao.impl.CompanyStudiesDAOImpl.addCompanyStudy(CompanyStudiesDAOImpl.java:31) at com.sb.core.businesslogic.impl.CompanyStudiesServiceImpl.addCompanyStudy(CompanyStudiesServiceImpl.java:26) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) 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.invoke(TransactionInterceptor.java:110) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) at $Proxy42.addCompanyStudy(Unknown Source) at com.sb.web.managed.beans.CompanyManagedBean.saveCompanyDetail(CompanyManagedBean.java:3612) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at javax.el.BeanELResolver.invokeMethod(BeanELResolver.java:737) at javax.el.BeanELResolver.invoke(BeanELResolver.java:467) at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:246) at com.sun.el.parser.AstValue.invoke(AstValue.java:228) at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297) at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102) at   javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84) at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98) at javax.faces.component.UICommand.broadcast(UICommand.java:311) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.IllegalArgumentException: argument type mismatch at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:65)     

my Bean class is

@Entity @Table(name = "company_studies", catalog = "studybuddyDB") public class CompanyStudies implements java.io.Serializable { /** *  */ private static final long serialVersionUID = 1L; // Fields private  Integer studyId = 0;  private CompanyDetail companyDetail;  private int isActive; /** default constructor */ public CompanyStudies() {  }  /** full constructor */ public CompanyStudies(CompanyDetail companyDetail,int isActive) { this.setCompanyDetail(companyDetail); this.setIsActive(isActive);*/   this.companyDetail = companyDetail; this.isActive = isActive; }   // Property accessors  @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "study_id", unique = true, nullable = false )  public Integer getStudyId() { return studyId; }  public void setStudyId(Integer studyId) { this.studyId = studyId; }  @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "company_detail_id") public CompanyDetail getCompanyDetail() { return companyDetail; }  public void setCompanyDetail(CompanyDetail companyDetail) { this.companyDetail = companyDetail; }  @Id @Column(name = "isActive", nullable = false)     public int getIsActive() { return isActive; }  public void setIsActive(int isActive) { this.isActive = isActive; }  } 

please help me out to fix this issue

回答1:

Some generators can't generate the identifier before the actual insert, therefore they return a special marker object from the generate() method. This object indicates that Hibernate should obtain identifier in different way, using PostInsertIdentifierGenerator.getInsertGeneratedIdentifierDelegate().
Try using a @SequenceGenerator or a @GenericGenerator



回答2:

I have came across the same error,

After some research I came to conclusion that it is depends on two things.

What DB you are using plus What @GenericGenerator - what strategy you are using. 

I was able to resolved issue with following configuration.

DB - MySQL Changed strategy to increment from native 

My code looks like:

@ElementCollection  @JoinTable(name="USERS_ADDRESSES",         joinColumns=@JoinColumn(name="USER_ID"))  @GenericGenerator(name="hilogen", strategy="increment")  @CollectionId(columns= {@Column(name="ADDR_ID")},          generator="hilogen", type=@Type(type="long"))   private List addressList = new ArrayList(); 

Hope this help.

Thank, Sagar Vyas



回答3:

This is clearly a format issue.Change Wrapper class object StudyId to primitive int.



回答4:

I tries a lot of solutions, but this worked for me:

@CollectionId(columns = { @Column(name="HASTYPE_ID") }, generator= "sequence", type=@Type(type="long")) 

This event work with INTEGER:

@CollectionId(columns = { @Column(name="HASTYPE_ID") }, generator= "sequence", type=@Type(type="int")) 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!