呵呵~~
第一个问题解决了,果然是主键生成方式的问题
把hibernate的主键生成方式都试了一遍,结果发现改为: <generator class="increment"/>
就没有问题了~~ 不知道是什么原因
Oracle里主键生成不能用sequence,可能是sql server里也有限制的缘故吧 :)
希望大家也发表一下看法~~
第二个汉字是乱码问题还没解决,继续等待~~

解决方案 »

  1.   

    又开始痛苦了,因为发现如果输入汉字,调用getInstance().addVipdata(vipdata); 方法后添加到数据库里的也是乱码,但英文数字没啥问题~
      

  2.   

    用native是可以的,在oracle数据库的时候,会生成一个hibernate_sequence的sequence。所以如果你用oracle,这个sequence的默认开始值是1,很可能会冲突,你可以用客户端工具将它调整到100或者更大值。如果你是在gui界面中输入中文,由于默认是iso_8859-1编码,要转码为gbk或utf-8(视数据库编码而定)。
      

  3.   

    1。我改为<generator class="native"/>时,并把sql server里的vipId都改成100以后的,执行时仍旧提示错误:net.sf.hibernate.JDBCException: Could not save object ,我把表中数据清空后还是一样的错误,请问还是id冲突的原因吗?2。当我使用<generator class="increment"/>主键生成时,在页面中可以正常添加数据
    但是执行时用企业管理器无法访问 sql server对应的表,并且tomcat重启后再执行页面时发现刚才正常添加数据都没有了,也就是没有保存到数据库中,请问用increment生成方式有什么错误吗?(我的表中只有3个字段即:vip_id(int型)、vip_name(varchar型)、vip_title(varchar型))
      

  4.   

    我深得hibernate的generator 有不少的问题,特别是TangHan插件。
    native的话,hibernate会自动去选择三种之一种生成方法。
    increment自增。应该没有问题。
    我的做法是不要生成器,或者改为assign(指派)。自己写代码来生成。乱码问题都是由于html,java,数据库的中文编码方式不同造成的。
    我的做法是在web.xml中指定。
    <filter>
            <filter-name>SetEncoding</filter-name>
            <filter-class>你的项目工具.SetEncodeFilter</filter-class>
            <init-param>
                <param-name>defaultencoding</param-name>
                <param-value>GBK</param-value>
                
            </init-param>
            
        </filter>
        <filter-mapping>
            <filter-name>SetEncoding</filter-name>
            <url-pattern>/*</url-pattern>        
        </filter-mapping>
      

  5.   

    你使用的是sql server,那么是没有sequence这种东西的。hibernate的native方案就是increment。
    那么错误的产生可能是sql语法不正确。请检查你的hibernate.cfg.xml中的dialect是否正确:
    net.sf.hibernate.dialect.SQLServerDialect
      

  6.   

    一般来说是用hibernate来构造自己的主键规则,要不就用程序给它手动指派
      

  7.   

    在save()之前,把编码转化成gbk看一看....