我是用myeclipse 8.5的,配置好hibernate后,进行update和查询都没问题,
就是添加时出错(有序列行),我把代码贴出来,有经验的前辈帮我看看,是否自己写错了
数据表-- Create table
create table student
(
  id  number not null,
  name varchar(32)
)
;
-- Create/Recreate primary, unique and foreign key constraints 
alter table student
  add constraint pk_student primary key (id);
-- Create sequence 
create sequence seq_student
minvalue 1
maxvalue 999999999999999
start with 1
increment by 1
nocache
cycle
order;student.hbm.xml
下面2种都试过<hibernate-mapping>
    <class name="orm.Student" table="STUDENT" schema="TEST">
        <id name="id" type="java.lang.Long">
            <column name="ID" precision="22" scale="0" />
            <generator class="sequence" >
             <param name="sequence">seq_student</param>
            </generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" length="32" />
        </property>
    </class>
</hibernate-mapping>或<hibernate-mapping>
    <class name="orm.Student" table="STUDENT" schema="TEST">
        <id name="id" type="java.lang.Long">
            <column name="ID" precision="22" scale="0" />
            <generator class="native"/>  
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" length="32" />
        </property>
    </class>
</hibernate-mapping>添加语句 Session session= orm.HibernateSessionFactory.getSession();   
Transaction tr=session.beginTransaction();
try {
orm.Student student = new orm.Student();
student.setName("zeng");
session.save(student);
tr.commit();
session.close();
} catch (HibernateException e) {
System.out.println("错误信息:" + e.getMessages());
tr.commit();
session.close();
}提示错误

解决方案 »

  1.   

    只捕获到这个,都不知道是什么
    错误信息:[Ljava.lang.String;@4ed904
      

  2.   

    使用e.printStackTrace()来查看异常的详细信息,而不是 System.out.println("错误信息:" + e.getMessages());另外,异常已经发生,则事务不能提交,而应该是回滚。catch (HibernateException e) {
       tr.rollback();
       e.printStackTrace()
    }
    finally{
        session.close();
    }
      

  3.   


    org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of orm.Student.id
    at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:104)
    at org.hibernate.tuple.AbstractEntityTuplizer.setIdentifier(AbstractEntityTuplizer.java:204)
    at org.hibernate.persister.entity.AbstractEntityPersister.setIdentifier(AbstractEntityPersister.java:3262)
    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:157)
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:114)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
    at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
    at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
    at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:530)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:518)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:514)
    at com.test.main(test.java:17)
    Caused by: java.lang.IllegalArgumentException: argument type mismatch
    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$BasicSetter.set(BasicPropertyAccessor.java:42)
    ... 13 more
      

  4.   

    你student 这个表的ID没有设置子增长,你又没有给他一个明确的值,导致无法插入嘛。你在数据库给这个表加一个触发器,当有新增时自动在将下一个序列作为ID。
      

  5.   

    看看你的orm.Student中的id字段是不是String型的,是的话,改成Long.还有相应的getter和setter也要改一下。
      

  6.   

    我在创建序列后执行select seq_student.nextval from dual;
    以为用hibernate访问就可以的,结果还不不行,真的只有创建触发器吗???
      

  7.   

    平时用hibernate插入项种有序列,真的一定要创建触发器才能插入成功的吗?
    我现在的错误,是oracle的创建问题,还是hibernate引用的问题?
      

  8.   

    非法参数异常 参数不匹配<hibernate-mapping>
        <class name="orm.Student" table="STUDENT" schema="TEST">
            <id name="id" type="java.lang.Long">
                <column name="ID" precision="22" scale="0" />  <!-- 列名写错了 应该是id -->
                <generator class="sequence" >
                    <param name="sequence">seq_student</param>
                </generator>
            </id>
            <property name="name" type="java.lang.String">
                <column name="NAME" length="32" />
            </property>
        </class>
    </hibernate-mapping>
      

  9.   

    非法参数异常 参数不匹配column 的名字 要和建表语句的column 对应上<hibernate-mapping>
      <class name="orm.Student" table="STUDENT" schema="TEST">
      <id name="id" type="java.lang.Long">
      <column name="id" precision="22" scale="0" /> <!-- 列名写错了 应该是id -->
      <generator class="sequence" >
      <param name="sequence">seq_student</param>
      </generator>
      </id>
      <property name="name" type="java.lang.String">
      <column name="NAME" length="32" />
      </property>
      </class>
    </hibernate-mapping>
      

  10.   

    杯具了,下边的配置文件没看见。
    我建议你把那个你创建的那个SEQUENCE名字改成大写,因为ORACLE会自动把你的名字改成大写,也有可能是因为你小写没找到。你先改成大写试试吧,配置方法还是用我在你那个帖子里回的那个
      

  11.   

    我改了,好像不是这个问题,里面的id是用myeclipse自动生成的,            <generator class="sequence" >
                    <param name="sequence">seq_student</param>
                </generator>才是我添加的
      

  12.   

    把orm里的XML文件里的sequence名字换大写试了吗?
      

  13.   

    帮我回答的过来这,我把分给你们
    http://topic.csdn.net/u/20110621/14/e3bab3a5-5934-44b5-881e-53d291c5eb33.html?seed=442431828&r=73966341#r_73966341