日期:2014-05-20  浏览次数:20860 次

100分求助!myeclipse用hibernate映射表之后出现复合主键的问题
数据库是SQLserver
我用myeclipse自动配置hibernate后,映射包含标示列的表之后总会生成复合主键
比如我有个Test1表 Test1中的id列为标示列 整形 自增 还有一个X列也是整形
映射之后 就会自动生成T1.java类和T1Id.java类
Test1.hbm.xml中也出现了
<composite-id name="id" class="dao.Test1Id">
  <key-property name="id" type="java.lang.Integer">
  <column name="id" />
  </key-property>
  <key-property name="x" type="java.lang.Integer">
  <column name="X" />
  </key-property>
</composite-id>
这种东西
我要往数据库里写入内容的时候用如下代码:
  Test1 bean=new Test1();
  Test1Id id=new Test1Id();
  id.setX(1);
  bean.setId(id);
  dao.save(bean);
就会报错
内容为[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'Test1' 中的标识列插入显式值。

当我把Test1Id.java类中的内容 补全到Test1.java中
再将Test1.hbm.xml的设置改为
<id name="id" column="id" type="integer">
<generator class="identity"/>
</id>
<property name="x" column="X" type="integer"/>

往数据库里写入内容的程序改为
  Test1 bean=new Test1();
  bean.setX(1);
  dao.save(bean);
就一切正常了 id字段自增 X字段也写入了值。

如果从头就自己写Test1.java类 手动写Test1.hbm.xml文件固然可以,不过就会非常麻烦。
所以还是想使用myeclipse自己的工具来生成这些东西的。我自己认为是我映射表的过程中哪一步设置出现了问题myeclipse才自动为我加上复合主键的。
请教各位大侠,这种情况究竟应该怎么做才能解决呢?
我究竟应该如何映射 才能让myeclispe直接把test1表配置成
<id name="id" column="id" type="integer">
<generator class="identity"/>
</id>
<property name="x" column="X" type="integer"/>
这样呢?
先谢谢各位了

------解决方案--------------------
IDENTITY_INSERT

你不要给那个IDENTITY 的属性赋值
------解决方案--------------------
引用楼主 tim17 的帖子:
Test1中的id列为标示列 整形 自增