【问题标题】:Hiibernate : java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.IntegerHiibernate:java.lang.ClassCastException:java.lang.String 无法转换为 java.lang.Integer
【发布时间】:2015-12-01 19:56:43
【问题描述】:

我正在尝试为休眠编写一个简单的代码。我使用 SQL Server 2012 作为数据库。我在运行应用程序时遇到以下错误:

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at org.hibernate.type.descriptor.java.IntegerTypeDescriptor.unwrap(IntegerTypeDescriptor.java:36)
at org.hibernate.type.descriptor.sql.IntegerTypeDescriptor$1.doBind(IntegerTypeDescriptor.java:64)
at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:90)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:282)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:277)
at org.hibernate.type.AbstractSingleColumnStandardBasicType.nullSafeSet(AbstractSingleColumnStandardBasicType.java:56)
at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2843)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3121)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3587)
at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:103)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:453)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:345)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1218)
at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:421)
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
at com.samples.test.HibernateUtil.main(HibernateUtil.java:28)

2015 年 9 月 5 日晚上 7:40:59 org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl 发布 信息:HHH000010:在批处理发布时,它仍然包含 JDBC 语句

这是我的 Employee 实体类

 package com.samples.hibernate;

public class Employee {

    private int ID;
    private String name;

    public int getID() {
        return ID;
    }
    public void setID(int iD) {
        ID = iD;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

这是我与数据库通信的代码。

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Configuration configuration = new Configuration().configure();
    StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
    SessionFactory factory = configuration.buildSessionFactory(builder.build());
    Session session = null;
    try
    {
        session = factory.openSession();
        Employee employee = new Employee();
        employee.setID(3);
        employee.setName("Venkatesh");

        session.beginTransaction();
        session.save(employee);
        session.getTransaction().commit();


    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    finally
    {
        session.close();
    }
}

Class Employee 的 ID 为整数,名称为 String。请帮我解决一下这个。我是新来的冬眠并试图学习。提前谢谢你。

【问题讨论】:

  • 你能发布你的Employee实体类吗?
  • @dazito 我现在已经包含了我的 Employee 类。谢谢
  • 因为您使用了 XML 配置,您也可以添加它吗?我的猜测是您的数据库最初在变量名中包含字符串值。尝试添加 "Create" -> "create-drop" 的 hbm2ddl 属性并刷新您的表以查看问题是否仍然存在。
  • 该表是使用 hbm2ddl 更新属性创建的

标签: java sql sql-server hibernate jdbc


【解决方案1】:

解决了。我重新创建了 .hbm.xml 文件。也许它将 int 作为 name 的数据类型。

【讨论】:

    猜你喜欢
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多