我用的hibernate3
数据库SQL SERVER2000
JDK1.5
TOMCAT 5.5
MyEclipse开发数据库就只有ID(增长)和name属性
Student.java:package com.dot.tiky;/**
* @hibernate.class
* table="student"
* dynamic-update="true"
* dynamic-insert="true"
*/public class Student{ private long id;
private String name;
/**
* @hibernate.id
* generator-class="uuid.hex"
*/ public long getID(){
return this.id;
}
public void setID(long id){
this.id=id;
}
/**
* @hibernate.property
* length="20"
* 声明表中对应的字段
*/ public String getName(){
return this.name;
} public void setName(String name){
this.name=name;
}
}Test.java:
package com.dot.tiky;import org.hibernate.*;
import org.hibernate.cfg.*;public class Test { public void doInsert() throws Exception{
try{
SessionFactory sf=new Configuration().configure().buildSessionFactory();
Session session=sf.openSession();
Transaction tx=session.beginTransaction();
Student s=new Student();
s.setName("heihei!");
session.save(s);
tx.commit();
session.close();
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
}
}IllegalArgumentException occurred while calling setter of com.dot.tiky.Student.ID
谢谢老鸟~~~~~~~~~~~
数据库SQL SERVER2000
JDK1.5
TOMCAT 5.5
MyEclipse开发数据库就只有ID(增长)和name属性
Student.java:package com.dot.tiky;/**
* @hibernate.class
* table="student"
* dynamic-update="true"
* dynamic-insert="true"
*/public class Student{ private long id;
private String name;
/**
* @hibernate.id
* generator-class="uuid.hex"
*/ public long getID(){
return this.id;
}
public void setID(long id){
this.id=id;
}
/**
* @hibernate.property
* length="20"
* 声明表中对应的字段
*/ public String getName(){
return this.name;
} public void setName(String name){
this.name=name;
}
}Test.java:
package com.dot.tiky;import org.hibernate.*;
import org.hibernate.cfg.*;public class Test { public void doInsert() throws Exception{
try{
SessionFactory sf=new Configuration().configure().buildSessionFactory();
Session session=sf.openSession();
Transaction tx=session.beginTransaction();
Student s=new Student();
s.setName("heihei!");
session.save(s);
tx.commit();
session.close();
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
}
}IllegalArgumentException occurred while calling setter of com.dot.tiky.Student.ID
谢谢老鸟~~~~~~~~~~~
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping
>
<class
name="com.dot.tiky.Student"
table="student"
dynamic-update="true"
dynamic-insert="true"
> <id
name="ID"
column="ID"
type="long"
>
<generator class="uuid.hex">
<!--
To add non XDoclet generator parameters, create a file named
hibernate-generator-params-Student.xml
containing the additional parameters and place it in your merge dir.
-->
</generator>
</id> <property
name="name"
type="java.lang.String"
column="name"
length="20"
/> <!--
To add non XDoclet property mappings, create a file named
hibernate-properties-Student.xml
containing the additional properties and place it in your merge dir.
--> </class></hibernate-mapping>
所有的资料都发上来了,就是不知道哪的问题!!!
database product name cannot be null
cfg.addClass(Student.class);
又不抱上面的错误了,抱了个:Error reading resource: com/dot/tiky/Student.hbm.xml
郁闷啊,总是一波三折啊~
映射文件也要做如下修改
<id
name="ID"
column="ID"
type="long"
>该成 <id
name="ID"
column="ID"
type="java.lang.String"
>
如果你还希望你的id是long 型的.请把generator-class="native"
generator-class="identity"//我用的是这个,因为我是SQL SERVER数据库不用自动适应,可是还有哪错呢
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping
>
<class
name="com.dot.tiky.Student"
table="student"
dynamic-update="true"
dynamic-insert="true"
> <id
name="id"
column="ID"
type="long"
>
<generator class="identity">
<!--
To add non XDoclet generator parameters, create a file named
hibernate-generator-params-Student.xml
containing the additional parameters and place it in your merge dir.
-->
</generator>
</id> <property
name="name" //莫非是这里不能name?名字冲突?
type="java.lang.String"
column="name"
length="20"
/> <!--
To add non XDoclet property mappings, create a file named
hibernate-properties-Student.xml
containing the additional properties and place it in your merge dir.
--> </class></hibernate-mapping>
public long getId() {
return this.id;
} public void setId(long id) {
this.id = id;
}这样才对
这个类型是用XDoclet生成的,你用了就知道了??我的GETTER,SETTER 方法对的啊,哪有问题??
你的是
public long getID(){
return this.id;
}
public void setID(long id){
this.id=id;
}
hibernate支持数据库自动增长的
用native 就可以啦
包括oracle 他都能够帮助实现自动增长
我真没明白你的意思?!我的配置文件的确以前是name="ID"//你说的这里吧
后来你没看到我已经改了么,改成name="id"
至于你说的getId()和我的getID有啥区别?你别告诉我是这里吧,这只是方法名,它找的是变量而不是方法吧
至于那么id自动增长的问题,我已经改过来了,请回帖的朋友,耐心一点看完,谢谢!!!!
hibernate是这样对应方法名的变量的的第一个字母大写,其后的变量如果大写,数据库对应的字段前必有一个下划线如:数据库对应字段"i_d"对应的get,set方法名才是getID,setID
name="id"既然你这样写的.
那么就应该用getId和setId,只是属性名首字母需要且必须也只能大写.
这个是javabean规范,根数据库没关系.
很感谢楼上的朋友们,今晚下班我回去看看!
关于规范问题,其实我是比较规范,但还真的在id这个地方,我做的项目里的BEAN还真的是
getID()呢?(好象是我觉得ID比Id好看些)!结果,这就影响到了我的hibernate配置,我回去改改看,先谢谢,有问题我再继续发问,直到实现我的第1个hibernate程序,也还请帮过的朋友耐心些吧!:)