`
sctom123
  • 浏览: 112554 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

IllegalArgumentException occurred calling getter of *

阅读更多
从别处copy过来的,和我的错一样
java 代码
 
  1. I have a basic model called "Group" which has a name, a reference to its parent (which is also a Group) and a collection of its children (which are Groups).  I've defined the hibernate mapping like so:  
  2.   
  3.   @Id  
  4.   @GeneratedValue(strategy=GenerationType.AUTO)  
  5.   public Long getId()  
  6.   {  
  7.     return id;  
  8.   }  
  9.   
  10.   @ManyToOne  
  11.   @JoinColumn(name="group_fk", nullable=true, insertable=false, updatable=false)  
  12.   public Group getParent()  
  13.   {  
  14.     return parent;  
  15.   }  
  16.   
  17.   @OneToMany(cascade = {CascadeType.ALL}, fetch=FetchType.LAZY)  
  18.   @JoinColumn(name="group_fk")  
  19.   public Collection<Group> getChildren()  
  20.   {  
  21.     return children;  
  22.   }  
  23.   
  24. When I try to save a Group using my DAO I get the following exception:  
  25.   
  26. org.springframework.orm.hibernate3.HibernateSystemException: IllegalArgumentException occurred calling getter of com.trace.model.Group.id; nested exception is org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.trace.model.Group.id  
  27. Caused by: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.trace.model.Group.id  
  28.         at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:171)  
  29. ....  
  30. ....  
  31. ....  
  32. Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class  
  33.         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  34.         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
  35.         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
  36.         at java.lang.reflect.Method.invoke(Method.java:597)  
  37.         at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:145)  
  38.   
  39. Any help or hints would be greatly appreciated.  Thanks in advance.  
下面是他的解决方案:
java 代码
 
  1. Alright, I figured it out.  I can't believe I wasted hours on this.    
  2.   
  3. The issue was that my DAO had a method called getChildren( Long ) which took an ID of a group and would return the children of the group with that ID.  The code was:    
  4.   
  5. DetachedCriteria crit = DetachedCriteria.forClass( Group.class );  
  6. crit.add( Restrictions.eq( "parent", id ) );  
  7.   
  8. The getParent() method of Group returns a Group but I was attempting to compare it against a Long.  
简单来说,就是parent和id类型不匹配。但是从错误的堆栈上面,很难看出是这样的错误。主要是经过hibernate封装。抛出是org.hibernate.PropertyAccessException: IllegalArgumentException错误,也就是说本来预期是某某类型,结果发现传入的不是某某类型。但是在写代码的时候编译器并不能捕捉到此错误。因为:
java 代码
  1. SimpleExpression org.hibernate.criterion.Restrictions.eq(String propertyName, Object value)  
后面是一个object,只会程序运行时才能够做这样的检查。也许它应该抛出这样的错。castclass错误,或者说预期什么参数,结果得到什么参数。这样在定位错误的时候就会更加容易一些。
分享到:
评论
1 楼 wendaoke 2008-01-24  
我也遇到这样的情况,但是后来直接写sql,就没有出现这样的问题。

c.add(Expression.in("areaId", areaIdStrs));
c.add(Expression.eq("type", agentType));

去掉了c.add(Expression.in("areaId", areaIdStrs))就可以了,没找哪里有错,后来就直接写了sql,就可以了。

相关推荐

    JAVA-提高反射效率

    从提供的代码片段来看,这段代码定义了一个名为`ClassInfoUtils`的工具类,主要功能是支持给定类的“getter”和“setter”方法映射到一个`ClassInfo`实例中。这个类包含了一些方法,如`putSetterMethod`和`...

    lombok使用demo

    5. **@NonNull**:标记字段为非空,Lombok 提供的注解处理器会自动在 setter 方法中添加 null 检查,并抛出 IllegalArgumentException。 6. **@Log4j** 或 **@Slf4j**:这些注解可以为类自动引入日志记录对象,比如...

    java.lang.Exception: java.lang.IllegalArgumentException: firstMovedIndex, lastMo

    标题 "java.lang.Exception: java.lang.IllegalArgumentException: firstMovedIndex, lastMove" 描述了一个Java编程中的异常情况。这个异常通常发生在尝试执行一个不合法的操作时,例如数组或集合操作超出了其边界。...

    Java源码非法访问异常IllegalArgumentException

    在Java编程中,`IllegalArgumentException` 是一个常见的运行时异常,属于`RuntimeException`的子类。这个异常通常在方法接收到不合法或不适当的参数时抛出。当一个方法需要接收特定类型的参数,而传入的参数明显不...

    java常见异常

    // 将抛出IllegalArgumentException ``` **解决方案**: - 验证传入参数的有效性。 - 提供清晰的错误消息帮助定位问题。 #### 6. `java.lang.IllegalAccessException` **描述**:当试图访问或修改私有成员变量或...

    java.lang.IllegalArgumentException Cannot format given Object as a Date

    在Java编程中,`java.lang.IllegalArgumentException` 是一个标准的运行时异常,它通常表示一个方法接收到的参数值不在预期范围内或者不合法。当尝试将一个无法转换为日期的对象格式化时,就会抛出"Cannot format ...

    java 线程池管理类:Executors_.docx

    - 异常:如果`threadFactory`为`null`或`nThreads`等于0,则分别抛出`NullPointerException`和`IllegalArgumentException`。 3. **创建单个线程的线程池**: - 方法名:`newSingleThreadExecutor()` - 功能:...

    java.lang.IllegalArgumentException: Class not found: org.apache.Struts2.validato

    在Java编程中,`java.lang.IllegalArgumentException` 是一个运行时异常,通常会在方法接收到非法或不合适的参数时抛出。这个错误信息 "Class not found: org.apache.struts2.validator" 指示程序在尝试加载名为 `...

    java-IllegalArgumentException:此NavController未知导航目标xxx-代码日志.html

    链接is unknown to this NavController

    日历查询(1900)

    6. **异常处理**:考虑到日期范围可能超出有效值,程序应该包含适当的异常处理机制,如`IllegalArgumentException`。 7. **执行与打包**:`datetable.exe`可能是通过Java的JAR打包工具将`DateTable.java`源代码编译...

    Android应用源码录音、播放功能最佳学习项目.zip

    - 编码、播放过程中可能会出现异常,需要捕获并处理,例如IOException、IllegalArgumentException等。 9. **音效控制** - 可以通过AudioManager调整系统音量,或使用AudioEffect实现混响、均衡器等特效。 10. **...

    android java.lang.IllegalArgumentException contains a path separator

    在Android开发中,Java编程时常会遇到`java.lang.IllegalArgumentException`异常,这通常表示传入的参数不符合方法的要求。在本例中,错误信息“contains a path separator”提示我们问题可能与路径分隔符有关,这...

    java银行账户管理

    - **存款、取款可能涉及的异常**:如金额不足(InsufficientFundsException)、输入非法(IllegalArgumentException)等。 - **try-catch-finally结构**:捕获并处理可能出现的异常,确保程序的健壮性。 4. **...

    JAVA实现计算立体图形体积、面积,通过接口类实现

    8. **封装**:为了遵循面向对象的原则,图形类的属性应设为私有(`private`),并提供公共的getter和setter方法来访问和修改这些属性。这样可以保护数据不被外部直接操作,提高代码的安全性。 通过以上步骤,我们...

    java源码:java求一个整数的因子.zip

    - **输入验证**:确保输入的是非负整数,可以通过`try-catch`块处理可能的`NumberFormatException`和`IllegalArgumentException`。 6. **代码结构与设计模式** - **函数封装**:可能有一个名为`findFactors`的...

    weibolu.rar_weibolu_微波炉

    5. **异常处理**:在处理时间或者用户输入时,可能会遇到无效的输入或超出范围的时间,因此需要进行异常处理,例如使用try-catch块来捕获并处理可能出现的`IllegalArgumentException`。 6. **控制流**:通过`System...

    Java基础学习20.pdf

    若小于0,则抛出IllegalArgumentException。 4. **扩容机制** - **确保容量**:当添加元素时,ArrayList会调用`ensureCapacityInternal(int minCapacity)`来检查当前数组容量是否足够。如果数组为空,它会使用默认...

    IllegalArgumentException如何解决.md

    IllegalArgumentException如何解决.md

    IllegalArgumentException解决办法.md

    IllegalArgumentException解决办法.md

Global site tag (gtag.js) - Google Analytics