请出示你的OID生成策略
一般出现此种情况是由于你的每一个Hibernate持久对象的OID一致。
因此可能是楼主将具有相同OID的对象重复注入不同属性导致的。。

解决方案 »

  1.   

    不好意思,偶hibernate刚入门。请问楼上ODI是啥意思?另外偶试过这样的测试流程:第一次运行程序new两个对象,然后save,数据库中就有了两行。第二次允许程序new一个对象,save,发现数据库中只有第二次运行的这一行了!
      

  2.   

    对象标识符生成策略难道不就是<generator class="native"/>这个嘛?
      

  3.   

    你的mapping有问题,看看我写的,如下:
    <class name="Star" table="Star">
      <id column="iuser_id" type="integer">
        <generator class="native"/>
      </id>
      <property name="name" column="name" type="string" length="10" not-null="true"/>
      ......
    </class>
    1、没有对应表名
    2、没有对应列名
    3、没有对应的类型
      

  4.   

    GlandJacky兄,省略的属性不是会自动用默认值的嘛???
    比如<property name="name">,表示column也是"name"啊
      

  5.   


    偶改成<generator class="increment"/>,发现虽然hibernate的sql输出虽然有变化,但是结果确没有变化,问题依然存在。(改成identity也一样)偶的测试流程是这样的,第一次运行程序时,new几个star对象,然后save,数据库显示正常。第二次运行时new一个star对象,然后save,这是发现数据库中第一次运行save的那几行数据都不见了,只剩下第二次运行程序时save的那个st ar!!!
    改成increment后的输出:
    Hibernate: select max(id) from Star
    Hibernate: insert into Star (name, ...., id) values (?, ...,?)
      

  6.   

    原来是因为这句!!!<property name="hbm2ddl.auto">create</property>
      

  7.   

    一般来说, Hibernate会更新这个表. 但如果是子表的请, 那Hibernate只能做删除后在插入. 上个项目就是这样做得, Hibernate现在还有些功能不是很好.