我是用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();
}提示错误
就是添加时出错(有序列行),我把代码贴出来,有经验的前辈帮我看看,是否自己写错了
数据表-- 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();
}提示错误
错误信息:[Ljava.lang.String;@4ed904
tr.rollback();
e.printStackTrace()
}
finally{
session.close();
}
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
以为用hibernate访问就可以的,结果还不不行,真的只有创建触发器吗???
我现在的错误,是oracle的创建问题,还是hibernate引用的问题?
<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>
<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>
我建议你把那个你创建的那个SEQUENCE名字改成大写,因为ORACLE会自动把你的名字改成大写,也有可能是因为你小写没找到。你先改成大写试试吧,配置方法还是用我在你那个帖子里回的那个
<param name="sequence">seq_student</param>
</generator>才是我添加的
http://topic.csdn.net/u/20110621/14/e3bab3a5-5934-44b5-881e-53d291c5eb33.html?seed=442431828&r=73966341#r_73966341