java - 如何解决 java.lang.ClassCastException : hibernate

标签 java mysql hibernate

我上过课,它有5个字段,在数据库(MySQL)中都是String类型,bean对应的表有2个varchar类型,剩下3个是整数类型。我正在通过 session.save(obj) 执行简单的插入操作。我的映射文件如下,

<hibernate-mapping>
<class name="com.aurodisplay.its.beans.VehicleRegisterBean"
    table="vehicle_details">
    <id column="vehicleno" name="vehicleno" type="java.lang.Integer">
        <generator class="native" />
    </id>
    <property column="vehicletype" name="vehicletype" type="java.lang.String"></property>
    <property column="model" name="model" type="java.lang.String"></property>
    <property column="clientid" name="clientid" type="java.lang.Integer"></property>
    <property column="groupid" name="groupid" type="java.lang.Integer"></property>

</class>
</hibernate-mapping> 

这是我的 Java 代码快照

Configuration configuration = new Configuration().configure();

    // 2. create sessionfactory
    SessionFactory sessionFactory = configuration.buildSessionFactory();

    // 3. Get Session object
    Session session = sessionFactory.openSession();

    // 4. Starting Transaction
    Transaction transaction = session.beginTransaction();

    VehicleRegisterBean vehicleRegisterBean=new VehicleRegisterBean();


    vehicleRegisterBean.setVehicletype(request.getParameter("vehicletype"));    
    vehicleRegisterBean.setModel(request.getParameter("model"));
    vehicleRegisterBean.setVehicleno(request.getParameter("vehicleno"));

    vehicleRegisterBean.setClientid(request.getParameter("clientid"));
    vehicleRegisterBean.setGroupname(request.getParameter("groupname"));

     session.save(vehicleRegisterBean);
     transaction.commit();
     System.out.println("\n\n Details Added \n");

我收到 ClassCastException,

SEVERE: Servlet.service() for servlet [com.abc.its.controller.VehicleRegister] in context with path [/ITS_Server] threw exception
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at org.hibernate.type.IntegerType.set(IntegerType.java:41)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:83)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:60)
at   org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:1947)
at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:1924)
at org.hibernate.persister.entity.AbstractEntityPersister$1.bindValues(AbstractEntityPersister.java:2102)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:32)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2108)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2588)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:48)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)

我是 hibernate 的新手,所以任何人都可以帮我解决这个问题。

最佳答案

将代码改成这样。正确调试代码,并查看哪个属性实际上作为 java.lang.String 的实例出现,理想情况下,根本原因是它应该仅作为 Integer 出现。

但解决方法是使用

解析它
Integer.valueOf(String s);


vehicleRegisterBean.setVehicletype(request.getParameter("vehicletype"));    
vehicleRegisterBean.setModel(request.getParameter("model"));


vehicleRegisterBean.setVehicleno(Integer.valueOf(request.getParameter("vehicleno")));

vehicleRegisterBean.setClientid(Integer.valueOf(request.getParameter("clientid")));
vehicleRegisterBean.setGroupname(Integer.valueOf(request.getParameter("groupname")));

好吧,Integer.valueOf(String) 的 API 确实说明了 String 的解释就像它被赋予 Integer.parseInt(String) 一样。但是,valueOf(String) 返回一个 new Integer() 对象,而 parseInt(String) 返回一个原始 int。

现在,如果您想要的是对象而不是原语,则使用 valueOf(String)

数据库未返回 native 生成的标识值

我认为这意味着您正在尝试将 k 生成器与未正确配置的表列一起使用。它应该是 auto_increment 列,以便 IDENTITY 生成器工作。否则,数据库不会返回任何生成的 ID。

更好的用户 type = long

<id column="vehicleno" name="vehicleno" type="java.lang.Integer">
         <generator class="increment"/>
    </id>

关于java - 如何解决 java.lang.ClassCastException : hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25498067/

相关文章:

php - LEFT JOIN 中的 COUNT 返回重复值

mysql - 在 EXISTS 查询中使用 LIMIT 有什么意义吗?

java - sqlite 打开数据库 : './sqlite.db' : permission denied

java - vaadin 中的延迟加载表

java - 更新 map 中的值

java - 部署多个 2.1 EJB 时的 OC4J 10.1.3.4 问题

MYSQL GROUP BY 和 WHERE 子句

java - 如何在restful服务中进行正则表达式过滤

java - 绑定(bind)到线程 [main] 的键 [org.hibernate.internal.SessionFactoryImpl] 没有值

java - IndexColumn 注释中的基本属性