【40分】Hibernate主键增长策略奇怪的问题 本帖最后由 simon1308 于 2012-11-29 20:11:44 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最近hibernate的问题还真多。楼主先去找个hibernate的资料吧:Hibernate参考文档。网上到处都有。第五章的5.1.4.1. Generator,有你想要的答案。另外,我再解释下你的程序:@Id//generator是“生成器”的意思。这个注释意思是:“使用名字为custom-id的生成器”@GeneratedValue(generator="custom-id")//创建一个主键生成器,名字为custom-id,策略为sequence。//后面parameters其实可以去掉,等下再跟你解释这个parameters的作用。@GenericGenerator(name="custom-id", strategy = "sequence",parameters = { @Parameter(name = "sequence",value= "S_BILL_ACCT_FUNC") })//字段设置@Column(name = "INNER_NO", unique = true, nullable = false, insertable = true, updatable = true, length = 22)custom-id只是个临时取的主键生成器名字罢了。就好比:Generator custom-id = new Generator(),生成一个名字为“custom-id”的生成器。你用其他任何名字都可以。“其他的model类里面也有很多是用custom-id这个变量”,这是因为每个model类都有个主键生成器,名字都是custom-id。就好比我们公司有个人叫“张三”,你们公司也有个人叫“张三”,另外一个公司还有个人叫“张三”,名字一样罢了。虽然都是生成器,但各自类所使用的并不是同一个生成器,就如上面的例子,虽然三个名字都叫“张三”,且都是“人”,但却是3个不同的对象。你把生成器名字改了,没有什么影响。主键增长策略为assigned,这个很简单。书上说得太书面化了,其实意思就是使用我们自己编写的程序生成主键值的意思。就是交给我们处理,机器就不管了。increment,用于为long, short或者int类型生成id。只有在没有其他进程往同一张表中插入数据时才能使用。在集群下不要使用。适合于MySQL,也适合于DB2,但没说其他数据库不能用。native的意思是,由hibernate根据数据库的类型,自动选择主键生成策略。等同于中文“自动选择”的意思。这个意思应该很明了了吧?碰到不同的数据库,hibernate会自动选择不同的策略。若是MySQL,则native=identity;若是Oracle或者DB2,则native=sequence。好了,再来个比较麻烦的。GenericGenerator(name="custom-id", strategy = "sequence",parameters = { @Parameter(name = "sequence",value= "S_BILL_ACCT_FUNC") })你这里用的是注解的方式,还有些不好读。换做xml配置式,则等同于如下配置:<id name="userId" column="userId"> <generator name="custom-id" class="sequence"> <generator class="sequence"> <param name="sequence">S_BILL_ACCT_FUNC</param> </generator> </generator></id><param name="sequence">S_BILL_ACCT_FUNC</param>的意思是,从S_BILL_ACCT_FUNC开始计数。如果不设置这句话,sequence从0开始算起。要是S_BILL_ACCT_FUNC=17,那么sequence就从17开始算起。说实话,我个人还是建议你好好去到网上去找下《Hibernate参考文档》,上面说得很详细了。 ……代码编辑又出岔子了。换做xml配置式,则等同于如下配置:<id name="userId" column="userId"> <generator name="custom-id" class="sequence"> <param name="sequence">S_BILL_ACCT_FUNC</param> </generator></id> 字符串的indexOf方法的用处 高分请教!学JAVA的人都会遇到的疑问? MyEclipse+TOMCAT+MSSQL20000连接池问题在线讨论 求教JSP错误 还有一个比较棘手的问题,在JSP和JAVABEAN结合中怎么进行分页显示!!!!在线等!!!! java新手:安装jdk时出现: "此 处理器类型不支持该安装程序包" 为什么啊? 下载了JWSDP1.4后如何使用? 第一次遇到这样的排序问题!!!! html里面下载的问题,急! 探讨如何使用Java语言实现word或excel文件的打印功能 JAVA web开发给你的感觉是什么 新手要制作一个小型购物车系统,求助大侠们。。。。
Hibernate参考文档。网上到处都有。
第五章的5.1.4.1. Generator,有你想要的答案。另外,我再解释下你的程序:@Id
//generator是“生成器”的意思。这个注释意思是:“使用名字为custom-id的生成器”
@GeneratedValue(generator="custom-id")
//创建一个主键生成器,名字为custom-id,策略为sequence。
//后面parameters其实可以去掉,等下再跟你解释这个parameters的作用。
@GenericGenerator(name="custom-id", strategy = "sequence",parameters = { @Parameter(name = "sequence",value= "S_BILL_ACCT_FUNC") })
//字段设置
@Column(name = "INNER_NO", unique = true, nullable = false, insertable = true, updatable = true, length = 22)
custom-id只是个临时取的主键生成器名字罢了。
就好比:Generator custom-id = new Generator(),生成一个名字为“custom-id”的生成器。你用其他任何名字都可以。“其他的model类里面也有很多是用custom-id这个变量”,这是因为每个model类都有个主键生成器,名字都是custom-id。就好比我们公司有个人叫“张三”,你们公司也有个人叫“张三”,另外一个公司还有个人叫“张三”,名字一样罢了。虽然都是生成器,但各自类所使用的并不是同一个生成器,就如上面的例子,虽然三个名字都叫“张三”,且都是“人”,但却是3个不同的对象。你把生成器名字改了,没有什么影响。主键增长策略为assigned,这个很简单。书上说得太书面化了,其实意思就是使用我们自己编写的程序生成主键值的意思。就是交给我们处理,机器就不管了。increment,用于为long, short或者int类型生成id。只有在没有其他进程往同一张表中插入数据时才能使用。在集群下不要使用。适合于MySQL,也适合于DB2,但没说其他数据库不能用。native的意思是,由hibernate根据数据库的类型,自动选择主键生成策略。等同于中文“自动选择”的意思。这个意思应该很明了了吧?碰到不同的数据库,hibernate会自动选择不同的策略。若是MySQL,则native=identity;若是Oracle或者DB2,则native=sequence。好了,再来个比较麻烦的。GenericGenerator(name="custom-id", strategy = "sequence",parameters = { @Parameter(name = "sequence",value= "S_BILL_ACCT_FUNC") })
你这里用的是注解的方式,还有些不好读。换做xml配置式,则等同于如下配置:<id name="userId" column="userId">
<generator name="custom-id" class="sequence">
<generator class="sequence">
<param name="sequence">S_BILL_ACCT_FUNC</param>
</generator>
</generator>
</id><param name="sequence">S_BILL_ACCT_FUNC</param>的意思是,从S_BILL_ACCT_FUNC开始计数。
如果不设置这句话,sequence从0开始算起。要是S_BILL_ACCT_FUNC=17,那么sequence就从17开始算起。说实话,我个人还是建议你好好去到网上去找下《Hibernate参考文档》,上面说得很详细了。
代码编辑又出岔子了。
换做xml配置式,则等同于如下配置:<id name="userId" column="userId">
<generator name="custom-id" class="sequence">
<param name="sequence">S_BILL_ACCT_FUNC</param>
</generator>
</id>