Как вылечить причину случайного исключения IllegalArgumentException occurred while calling setter
, которое выдает Hibernate, когда моя программа пытается загрузить пользователя по имени из базы данных?
Я неправильно сопоставляю столбец USER_RV
в таблице User
с классом Integer
вместо BigDecimal
или каким-либо другим целочисленным типом? Обратите внимание, что то же приложение отображает NUMBER
столбцы в других таблицах на Integer
объекты, но Hibernate не выдает это исключение при заполнении объекта строкой из этих таблиц.
Также обратите внимание, что программа включает Репликация кэша RMI только для Пользовательского кэша . Может ли это исключение быть связано с репликацией кэша? Это ошибка в Ehcache или Hibernate?
Caused by: org.springframework.orm.hibernate3.HibernateSystemException: IllegalArgumentException occurred while calling setter of com.db.spgit.abstrack.model.User.rv; nested exception is org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of com.db.spgit.abstrack.model.User.rv
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:676)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.findByCriteria(HibernateTemplate.java:1055)
at org.springframework.orm.hibernate3.HibernateTemplate.findByCriteria(HibernateTemplate.java:1048)
at com.db.abstrack.dao.hibernate.AbstrackDaoHibernate.findByCriteria(AbstrackDaoHibernate.java:57)
at com.db.abstrack.dao.hibernate.UserDaoHibernate.loadByName(UserDaoHibernate.java:63)
at com.db.spgit.abstrack.manager.QuoteManager.populateUser(QuoteManager.java:330)
at com.db.spgit.abstrack.manager.QuoteManager.populateOwnerUK(QuoteManager.java:307)
at com.db.spgit.abstrack.manager.QuoteManager.populateGuids(QuoteManager.java:254)
at com.db.spgit.abstrack.manager.QuoteManager.addQuoteReturnVwRfqUK(QuoteManager.java:429)
at com.db.spgit.abstrack.manager.QuoteManager$$FastClassByCGLIB$$d817accb.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:700)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:635)
at com.db.spgit.abstrack.manager.QuoteManager$$EnhancerByCGLIB$$cc8d0025.addQuoteReturnVwRfqUK(<generated>)
at com.db.abstrack.ejb.RfqBean.addRfqDraftListUK(RfqBean.java:370)
... 59 more
Caused by: org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of com.db.spgit.abstrack.model.User.rv
at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:104)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:337)
at org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:200)
at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3514)
at org.hibernate.cache.entry.CacheEntry.assemble(CacheEntry.java:116)
at org.hibernate.cache.entry.CacheEntry.assemble(CacheEntry.java:82)
at org.hibernate.event.def.DefaultLoadEventListener.assembleCacheEntry(DefaultLoadEventListener.java:553)
at org.hibernate.event.def.DefaultLoadEventListener.loadFromSecondLevelCache(DefaultLoadEventListener.java:508)
at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:357)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:139)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:179)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:846)
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:557)
at org.hibernate.type.ManyToOneType.assemble(ManyToOneType.java:196)
at org.hibernate.cache.StandardQueryCache.get(StandardQueryCache.java:130)
at org.hibernate.loader.Loader.getResultFromQueryCache(Loader.java:2152)
at org.hibernate.loader.Loader.listUsingQueryCache(Loader.java:2117)
at org.hibernate.loader.Loader.list(Loader.java:2087)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:95)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
at org.springframework.orm.hibernate3.HibernateTemplate$36.doInHibernate(HibernateTemplate.java:1065)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
... 77 more
Caused by: java.lang.IllegalArgumentException: java.lang.ClassCastException@6be0d6
at sun.reflect.GeneratedMethodAccessor104.invoke(Unknown Source)
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:42)
... 101 more
Определение класса User
:
@Entity
@Proxy(lazy=false)
@Cache(usage=CacheConcurrencyStrategy.TRANSACTIONAL)
@Table(name="TB_USER"
,schema="ABSOL_USER"
)
public class User implements java.io.Serializable {
private String id;
private String userName;
private Integer rv;
public User() {
}
public User(String userName, Integer rv) {
this.userName = userName;
this.rv = rv;
}
@GenericGenerator(name="generator", strategy="guid")@Id @GeneratedValue(generator="generator")
@Column(name="USER_ID", unique=true, nullable=false)
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
@Column(name="USER_NAME", nullable=false, length=20)
public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Column(name="USER_RV", precision=22, scale=0)
public Integer getRv() {
return this.rv;
}
public void setRv(Integer rv) {
this.rv = rv;
}
}
Определение таблицы TB_USER
:
CREATE TABLE "ABSOL_OWNER"."TB_USER" (
"USER_ID" RAW(16) DEFAULT SYS_GUID(),
"USER_NAME" VARCHAR2(20 CHAR) NOT NULL ENABLE,
"USER_RV" NUMBER NOT NULL ENABLE,
PRIMARY KEY ("USER_ID")
)
Окружающая среда:
- Hibernate 3.3.2.GA
- Ehcache 2.2.0
- WebLogic Server 10.3.2
- База данных Oracle
- Кэширование пользовательских объектов
- Включена репликация RMI-кэша с помощью удаленного аннулирования ключа