如果你的数据库是mysql,要用identity,然后到mysql的控制台把AUTO_INCRMENT选上。
author表<generator class="foreign">没有用过。
如果是Oracle数据库
<generator class="sequence">
<param name="sequence">S_BUYER_INFO</param>
</generator>
要用序列生成器,还需要在Oracle数据库控制台里为每一张表增加一个sequence。这里为buyer表增加的序列叫做S_BUYER_INFO。
author表<generator class="foreign">没有用过。
如果是Oracle数据库
<generator class="sequence">
<param name="sequence">S_BUYER_INFO</param>
</generator>
要用序列生成器,还需要在Oracle数据库控制台里为每一张表增加一个sequence。这里为buyer表增加的序列叫做S_BUYER_INFO。
解决方案 »
- spring整合struts 启动tomcat出错 配置如下 高手帮下我这菜鸟!
- 删除表信息,主外键约束提示问题。。。。。。
- 高手进来解答
- 对ThreadLocal实现HibernateSessionFactory的思考
- No getter method…… 绝对是非常规错误,Struts高手们进
- 今天面试被问了一个简单的问题,可是我不会
- 我这个工资在广州算哪个档次?
- Structs中ActionForm的困惑
- 高手进来看看,能说服我的,给分。哈。
- Ejb中怎么访问远程接口函数?
- 来着有分!请问如果我是用应用程序而不是用网页的方式对ejb进行使用,怎么访问呢?是不是需要是用rmi残桩呢?
- 菜鸟问题,安装TOMCAT时 提示“请选择JVM目录到我的系统”,JVM是什么,怎么装呀?
supports identity columns in DB2, MySQL, MS SQL Server, Sybase and HypersonicSQL. The returned identifier is of type long, short or int. sequence
uses a sequence in DB2, PostgreSQL, Oracle, SAP DB, McKoi or a generator in Interbase. The returned identifier is of type long, short or int uuid.hex
uses a 128-bit UUID algorithm to generate identifiers of type string, unique within a network (the IP address is used). The UUID is encoded as a string of hexadecimal digits of length 32.
改成:<generator class="native"/> 或者<generator class="identity"/>
我改了;也上试过了;可是还是不正确,到底是什么原因呢????
我改如何去改正呢????????????????????
我都做了的;person表(id,name,email)
author表(id,alias)现在只能向person中添加数据;而不能向author中添加数据,我把person.hbm.xml:<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="goodok.Person" table="person"><id name="id"
column="id"
type="long"
length="10">
<generator class="identity"/>
</id><property name="name"
column="name"
type="java.lang.String"
length="200"
update="false" insert="false"
not-null="true">
</property><property name="email"
column="email"
type="java.lang.String"
length="200">
</property>
</class>
</hibernate-mapping>还是不行;难道one-to-one的问题真的要两次save吗???打出的问题:Hibernate: insert into person (email) values (?)10:24:19,593 ERROR BasicPropertyAccessor:60 - IllegalArgumentException in class: goodok.Person, setter method of property: id10:24:19,593 ERROR BasicPropertyAccessor:64 - expected type: java.lang.String, actual value: java.lang.Long
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="com.unida.egov.lane.hibernate.entity.User" table="t_user">
<id column="f_user_pkid" length="20" name="userPkid" type="long">
<generator class="identity"/>
</id>
<property column="f_user_id" length="100" name="userId" not-null="true" type="string" unique="true"/>
<property column="f_password" length="100" name="password" not-null="true" type="string"/>
<property column="f_name" length="100" name="name" not-null="true" type="string"/>
<property column="f_level" length="100" name="level" not-null="true" type="string"/>
<property column="f_visit" length="100" name="visit" not-null="true" type="string"/>
</class>
</hibernate-mapping>还要提醒一点,实体类的属性里不要出现叫做id的属性,表里边也不要有,否则会出错。
一张表里必须有一个主键,我这里的主键叫做f_user_pkid,实体里的属性叫做userPkid。
然后有一个用户编号,表里叫做f_user_id,实体里叫做userId,然后才是用户名等其它内容。
我看你的表只有一个主键id,然后就是用户名了,那你的用户编号是哪个?如果是主键id就错了。因为使用了生成器以后主键的值是自动生成的,你可别把用户的编号手动设置进去。
主键id一直是自动增加,不允许修改的,用户的编号要另外做一个字段来存储。
在你的表属性里,记得要指定你的主键是哪个字段。
首先很感谢你;那你的意思是我建数据库应该这样:person表(id,personid,name,email)(personid 为主键)
author表(id,autorid,alias)(autorid为主键 )是这样吗??生成器生成的不能当着主键来用,每个表都要有自己的主键,而生成器生产的ID就没有作用了?
person表(id,personid,name,email)(personid 为主键)
author表(id,autorid,alias)(autorid为主键 )
是这样吗??
生成器生成的不能当着主键来用,每个表都要有自己的主键,而生成器生产的ID就没有作用了?
to niyboy(JAVA爱好者):
这里的personid和autorid是你的用户编号吧?那它们都不能是主键,它们是显示给用户使用或者允许修改的值。而hibernate里主键指的是用来与其它表中的字段进行关联的字段,也就是这里的id。比如:一张表示用户表,一张表是用户购物清单表,还有一张是用来关联用户表和购物清单表的关联表:
用户表:
userpkid(自动生成) userid name sex age
00000001 00001 icecraft man 22
00000002 00003 abenmao man 10
00000003 00005 ice woman 20
购物清单表:
goodspkid(自动生成) goodsid goodsname buytime prise
00000011 00001 thinkinjava 2004-8-16 50
00000012 00034 jspprogrammer 2004-8-17 100
关联表:
usergoodspkid(自动生成) userpkid goodspkid
00000001 00000001 00000011
00000002 00000003 00000012以上说明,用户编号、订单编号都是独立的,可以显示给用户看,甚至允许用户修改的,比如这里的userid和goodsid。
而用来把几张表关联起来的的字段就是主键或外键了,在用户表中userpkid是主键,在购物清单表中goodspkid是主键,在关联表中usergoodspkid是主键、userpkid和goodspkid是外键。
看懂了吗,这是数据库设计的一种方式。方式有很多,不过我觉得用在hibernate方面,这种比较好。关系采用one to many或many to one,为每一个表都建立一个映射和实体,多看看hibernate的文档,里边都有介绍。
注意,字段名称最好不要叫作id,叫做userpkid或者userid都可以。我曾经因为字段名为id出现过很大的麻烦,就是数据无法读写,也不报错,所以建议不要使用id做表字段名和实体属性名。