本帖最后由 simon1308 于 2012-11-29 20:11:44 编辑

解决方案 »

  1.   

    最近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参考文档》,上面说得很详细了。
      

  2.   

    ……
    代码编辑又出岔子了。
    换做xml配置式,则等同于如下配置:<id name="userId" column="userId">
            <generator name="custom-id" class="sequence">
                    <param name="sequence">S_BILL_ACCT_FUNC</param>
            </generator>
    </id>