EclipseLink Sql-Server IDENTITY_INSERT错误

时间:2013-07-25 14:00:37

标签: java sql-server eclipse sql-server-2000 eclipselink

使用EclipseLink,我试图将行插入到具有自动递增标识列的SQLServer旧数据库中:

CREATE TABLE [dbo].[tContacts] (
[conIdContact] [int] IDENTITY (1, 1) NOT NULL ,
[conContactName] [varchar] (100) NOT NULL , ...

我正在使用中所述的'身份'策略 http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Example_identity_XML

      <orm:id name="id">
        <generated-value strategy="IDENTITY"/>
        <orm:column name="conIdContact" updatable="false" />
  </orm:id>

EclipseLink生成以下SQL:

Call: INSERT INTO tContacts (conIdContact, ConContactName, ...
VALUES (?, ?, ...
bind => [null, testheini_2, ...

导致以下异常:

内部例外: com.microsoft.sqlserver.jdbc.SQLServerException:Ein expliziterWertfürdieIdentitätsspaltekannin der tContacts-Tabellenichtingefügtwerden,wenn IDENTITY_INSERT auf OFF festgelegt ist。 错误代码:544

(对不起,这是德语,但它告诉我们只要IDENTITY_INSERT设置为OFF,就可以将任何值插入到标识列中,这是默认值)

我假设SQLServer想要自己创建ID,所以不喜欢EclipseLink尝试在id列中插入一个值(此处为:null)。
所有其他策略,或者完全省略生成值策略,都会产生相同的结果 到目前为止,我发现无法让EclipseLink将记录插入此表中!

将IDENTITY INSERT设置为ON是不可行的解决方案,因为标准用户无权修改表格。

在Hibernate中映射这个表是很简单的,所以我很惊讶EclipseLink似乎是不可能的。我在Hibernate中是如何做到的:

        <id name="id" type="int">
        <column name="conIdContact" />
        <generator class="assigned" />
    </id>

我被困住了,我感谢任何想法,这里出了什么问题! 汉纳斯

@Chris:我坚持这样:
            con.setName( “testheini_2”);
            em.getTransaction()开头();
            em.persist(CON);
            em.getTransaction()提交();点。

确实使用了contact-orm.xml文件,我可以在添加拼写错误时看到它 我还补充了     property name =“eclipselink.target-database”value =“SQLServer”

    property name =“eclipselink.target-database”value =“org.eclipse.persistence.platform.database.SQLServerPlatform”

到persistence.xml,但它没有任何区别。 我还能检查什么呢? 汉纳斯

0 个答案:

没有答案