hibernate推荐大家使用一个主键,而且最好是与业务无关,只是一个逻辑主键。但是这样做就会有这样一个问题: 
假如有这样一个表,有三个字段,id,userid,username.其中id为主键,与业务无关,为一个自增字段。如果我插入2条重复的记录,比如(0001,张三),(0001,张三),都可以插入数据库了。请问各位高手怎样解决这个问题啊,保证不重复插入数据。小弟先谢过了

解决方案 »

  1.   


    不可能,如果你在建表的时候设置主键,一定会存在主键约束。
    Hibernate会尊重这个约束的。你的ID,犹如0001型,一定是个varchar型或者char型吧。你如果想自己控制id,就采用assigned生成方式;
    如果你在数据库里设置了主键的生成方式,就采用native;
    也可以自己写个主键生成类!
      

  2.   

    我的意思是hibernate推荐使用与业务无关的主键,所以我用了一个自增的字段--id。我现在关心的是业务不能插入2条userid和username一样的记录,但是因为主键是自增字段,实际上这2条记录时能插入数据库的,请问怎样配置才能不插入2条重复的记录。
    unique在哪里配置呀,望赐教
      

  3.   

    给数据表增加一个primer key列
      

  4.   

    在建表的时候对userid、username列加上关键字unique试试!采用工具生成hbm.xml文件,看看是怎么处理的!
      

  5.   

    楼上的,我是先建了数据库表,再在myeclipse里面生成hbm.xml。你说的“在建表的时候对userid、username列加上关键字unique试试!”是在数据库表里面加还是在hbm.xml里面加,语法是什么啊?
      

  6.   

    用 unique="true" 
    例如: <property name="usernam" column="USERNAME" type="java.lang.String" unique="true" not-null="true" length="50"/>
      

  7.   

    用什么工具可以自动生成hbm.xml文件啊?
      

  8.   

    定义数据表的时候用unique,具体参考数据库帮助文档。如果插入的数据违反这个unique约定,数据库会返回错误信息。