在hibernate 3.2环境下,在customer表中customerId为自动增长的主键,是映射为long类型。我按表中的phoneNumber字段为条件查找出符合的customer对象,删除时为delete(customer),但却抛出异常:Provided id of the wrong type. Expected: class java.lang.Long, got class java.lang.String。说ID是错误的类型,期望long类型但得到的是String。我郁闷啊,我又没有以customerId为条件查找,是以phoneNumber为条件而且它是String类型的。

解决方案 »

  1.   

    这是customer表的映射文件
    <hibernate-mapping>
        <class name="com.mobileBusiness.pojo.Customer" table="CUSTOMER" schema="JEVON">
            <id name="customerId" type="java.lang.Long">
                <column name="CUSTOMER_ID" precision="22" scale="0" />
                <generator class="sequence">
                 <param name="sequence">CUSTOMERID</param>
                </generator>
            </id>
            <property name="customerName" type="java.lang.String">
                <column name="CUSTOMER_NAME" length="50" />
            </property>
            <property name="customerAddress" type="java.lang.String">
                <column name="CUSTOMER_ADDRESS" length="200" />
            </property>
            <property name="phoneNumber" type="java.lang.String">
                <column name="PHONE_NUMBER" length="11" />
            </property>
            <property name="customerPwd" type="java.lang.String">
                <column name="CUSTOMER_PWD" length="6" />
            </property>
            <property name="balance" type="java.lang.Float">
                <column name="BALANCE" precision="8" />
            </property>
            <property name="buildDate" type="java.lang.String">
                <column name="BUILD_DATE" length="20" />
            </property>
            <property name="customerType" type="java.lang.String">
                <column name="CUSTOMER_TYPE" length="50" />
            </property>
        </class>
    </hibernate-mapping>
      

  2.   

    配置没有问题,建议你删除customer对象之前,检查一下值类型,或者你可以换一个delete方法调用,根据ID来删除试试这种问题,没有通用的原则,只能调试调试,应该很快能解决的
      

  3.   

    问题应该不大,可以贴出你的查询和删除的代码,还有你的entity
      

  4.   

    我上网查了一下,我用spring把hibernate进行了封装,网上说就只能通过ID来查找,不能通过其它条件。还请各位高手再指点指点怎样通过其它条件来查找删除
      

  5.   

    Customer customer =(Customer) manageCustomer.findByNumber(phoneNumber)这是查询
    manageCustomer.delete(customer)这是删除
    下面是manageCustomer中的查询方法
    return (Customer)getHibernateTemplate().get("com.mobileBusiness.pojo.Customer",phoneNumber);
      

  6.   

    getHibernateTemplate().get()是根据id获取对象的,你必须要这么做
    List<Customer> list=getHibernateTemplate().find("from Customer c where c.phoneNumber= ?",phoneNumber);
    for(Customer c : list){
    getHibernateTemplate().delete(c);
    }
      

  7.   

    Customer customer =(Customer) manageCustomer.findByNumber(phoneNumber)
    findByNumber()是怎么写的啊,是楼上说的get()吗
      

  8.   


    嗯 就是get("com.mobileBusiness.pojo.Customer",phoneNumber); 
    phoneNumber是Customer中的属性
      

  9.   

    get只能根据id获取,这是钉死的,你的方法就是错的