从别处copy过来的,和我的错一样
java 代码
- 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:
-
- @Id
- @GeneratedValue(strategy=GenerationType.AUTO)
- public Long getId()
- {
- return id;
- }
-
- @ManyToOne
- @JoinColumn(name="group_fk", nullable=true, insertable=false, updatable=false)
- public Group getParent()
- {
- return parent;
- }
-
- @OneToMany(cascade = {CascadeType.ALL}, fetch=FetchType.LAZY)
- @JoinColumn(name="group_fk")
- public Collection<Group> getChildren()
- {
- return children;
- }
-
- When I try to save a Group using my DAO I get the following exception:
-
- 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
- Caused by: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.trace.model.Group.id
- at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:171)
- ....
- ....
- ....
- Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
- 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$BasicGetter.get(BasicPropertyAccessor.java:145)
-
- Any help or hints would be greatly appreciated. Thanks in advance.
下面是他的解决方案:
java 代码
- Alright, I figured it out. I can't believe I wasted hours on this.
-
- 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:
-
- DetachedCriteria crit = DetachedCriteria.forClass( Group.class );
- crit.add( Restrictions.eq( "parent", id ) );
-
- 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 代码
- SimpleExpression org.hibernate.criterion.Restrictions.eq(String propertyName, Object value)
后面是一个object,只会程序运行时才能够做这样的检查。也许它应该抛出这样的错。castclass错误,或者说预期什么参数,结果得到什么参数。这样在定位错误的时候就会更加容易一些。
分享到:
相关推荐
从提供的代码片段来看,这段代码定义了一个名为`ClassInfoUtils`的工具类,主要功能是支持给定类的“getter”和“setter”方法映射到一个`ClassInfo`实例中。这个类包含了一些方法,如`putSetterMethod`和`...
5. **@NonNull**:标记字段为非空,Lombok 提供的注解处理器会自动在 setter 方法中添加 null 检查,并抛出 IllegalArgumentException。 6. **@Log4j** 或 **@Slf4j**:这些注解可以为类自动引入日志记录对象,比如...
标题 "java.lang.Exception: java.lang.IllegalArgumentException: firstMovedIndex, lastMove" 描述了一个Java编程中的异常情况。这个异常通常发生在尝试执行一个不合法的操作时,例如数组或集合操作超出了其边界。...
在Java编程中,`IllegalArgumentException` 是一个常见的运行时异常,属于`RuntimeException`的子类。这个异常通常在方法接收到不合法或不适当的参数时抛出。当一个方法需要接收特定类型的参数,而传入的参数明显不...
// 将抛出IllegalArgumentException ``` **解决方案**: - 验证传入参数的有效性。 - 提供清晰的错误消息帮助定位问题。 #### 6. `java.lang.IllegalAccessException` **描述**:当试图访问或修改私有成员变量或...
在Java编程中,`java.lang.IllegalArgumentException` 是一个标准的运行时异常,它通常表示一个方法接收到的参数值不在预期范围内或者不合法。当尝试将一个无法转换为日期的对象格式化时,就会抛出"Cannot format ...
- 异常:如果`threadFactory`为`null`或`nThreads`等于0,则分别抛出`NullPointerException`和`IllegalArgumentException`。 3. **创建单个线程的线程池**: - 方法名:`newSingleThreadExecutor()` - 功能:...
在Java编程中,`java.lang.IllegalArgumentException` 是一个运行时异常,通常会在方法接收到非法或不合适的参数时抛出。这个错误信息 "Class not found: org.apache.struts2.validator" 指示程序在尝试加载名为 `...
链接is unknown to this NavController
6. **异常处理**:考虑到日期范围可能超出有效值,程序应该包含适当的异常处理机制,如`IllegalArgumentException`。 7. **执行与打包**:`datetable.exe`可能是通过Java的JAR打包工具将`DateTable.java`源代码编译...
- 编码、播放过程中可能会出现异常,需要捕获并处理,例如IOException、IllegalArgumentException等。 9. **音效控制** - 可以通过AudioManager调整系统音量,或使用AudioEffect实现混响、均衡器等特效。 10. **...
在Android开发中,Java编程时常会遇到`java.lang.IllegalArgumentException`异常,这通常表示传入的参数不符合方法的要求。在本例中,错误信息“contains a path separator”提示我们问题可能与路径分隔符有关,这...
- **存款、取款可能涉及的异常**:如金额不足(InsufficientFundsException)、输入非法(IllegalArgumentException)等。 - **try-catch-finally结构**:捕获并处理可能出现的异常,确保程序的健壮性。 4. **...
8. **封装**:为了遵循面向对象的原则,图形类的属性应设为私有(`private`),并提供公共的getter和setter方法来访问和修改这些属性。这样可以保护数据不被外部直接操作,提高代码的安全性。 通过以上步骤,我们...
- **输入验证**:确保输入的是非负整数,可以通过`try-catch`块处理可能的`NumberFormatException`和`IllegalArgumentException`。 6. **代码结构与设计模式** - **函数封装**:可能有一个名为`findFactors`的...
5. **异常处理**:在处理时间或者用户输入时,可能会遇到无效的输入或超出范围的时间,因此需要进行异常处理,例如使用try-catch块来捕获并处理可能出现的`IllegalArgumentException`。 6. **控制流**:通过`System...
若小于0,则抛出IllegalArgumentException。 4. **扩容机制** - **确保容量**:当添加元素时,ArrayList会调用`ensureCapacityInternal(int minCapacity)`来检查当前数组容量是否足够。如果数组为空,它会使用默认...
IllegalArgumentException如何解决.md
IllegalArgumentException解决办法.md