Session session = sessionFactory.openSession(); Transaction transation = session.beginTransaction(); //获取需要修改的用户 Employee emp = (Employee)session.load(Employee.class, 2); 如果我只有直接写int类型,就会报错,但是如果更改为Integer类型的实例就可以,代码如下 Session session = sessionFactory.openSession(); Transaction transation = session.beginTransaction(); //获取需要修改的用户 Employee emp = (Employee)session.load(Employee.class, new Integer(2)); 为什么会出现这样的情况?不是可以自动拆箱装箱的吗?我用的jdk 是1.7的 |
|
6分 |
程序没有直接在eclipse里显示语法错误,那说明自动拆装箱是ok的。
但具体到在hibernate中的操作,那要看你引用的hibernate版本本身是否支持自动拆装了。 应该是你的hibernate本身不允许这么做,所以你才必须要写成对象类型才能进行查询,这和jdk已经无关了 |
5分 |
用int试了一下,好用。
LZ最后把异常贴出来 |
异常如下:
Exception in thread “main” java.lang.Error: Unresolved compilation problem: The method load(Class, Serializable) in the type Session is not applicable for the arguments (Class, int) at com.liang.view.TestMain.updateEmployee(TestMain.java:43) |
|
程序是有包语法错误的在load那报错了 |
|
而且我用相同的Hibernate的jar包引入大致相同的项目,直接使用int类型是没问题的
|
|
10分 |
如果真是语法错误的话,请确认eclipse中window->Preferences->java->Compiler , 里面的Compiler compliance level是不是选中了你JDK相应版本的compiler 。JDK7我没用过,但我想你这至少要选个1.5,才能保证自动拆装正确。 |
5分 |
LZ的JDK不支持自动拆装箱
|
2分 |
当然要用Integer了。。
|
怎么可能,我的jak是比较新的版本的,jdk-7u1-windows-i586 |
|
[Quote=引用 7 楼 的回复:]
呵呵呵!谢谢leftstick的提醒!原来这个项目使用的JDK是1.3的,没有使用我的JDK,我把版本改为我的JDK后,就能自动装箱拆箱了,问题终于解决了!谢谢 |
|
不,JDK1.5后支持自动拆装,我另外一个项目就可以直接使用int类型 |
|
我也是同样的问题,貌似只能用Integer 包装下才能使用
|