2013-08-06 161 views
1

我試圖用Hibernate在MS SQL中插入一個對象,如果它不存在於數據庫中的話。 我打電話查找查詢方法吧返回空列表但真正在表中有這個對象!因此,當我調用insert方法時,hibernate想要插入對象,因爲它認爲表是空的,所以它拋出違反UNIQUE KEY約束條件! 它適用於Oracle沒有任何問題。 這是否可能是由我的許可或模式或目錄引起的?Hibernate違反UNIQUE KEY約束條件

<property name="schemaUpdate" value="${schemaUpdate}"/> 
    <property name="hibernateProperties"> 
     <props> 
      <!--<prop key="hibernate.default_schema">${database.schema}</prop>--> 
      <prop key="hibernate.default_schema">${database.schema}</prop> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
      <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> 
      <prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop> 

      <prop key="hibernate.query.substitutions">true 'Y', false 'N'</prop> 
      <prop key="hibernate.cache.use_second_level_cache">true</prop> 
      <prop key="hibernate.cache.use_query_cache">true</prop> 
      <prop key="hibernate.max_fetch_depth">3</prop> 
      <prop key="hibernate.use_outer_join">true</prop> 

,並

hibernate.dialect=org.hibernate.dialect.SQLServerDialect 

hibernate.show_sql=true 
#true: if the database is needed to be created otherwise false 
schemaUpdate=false 
hibernate.hbm2ddl.auto=update 

base.packages=com.cityid 
database.schema=dbo 

hibernate.cache.provider_class=net.sf.ehcache.hibernate.SingletonEhCacheProvider 
REM hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider 
+1

你有'show_sql'設置,所以你可以看到它正在運行的確切的SQL查詢。您是否嘗試過手動執行查詢以查看您獲得的結果? – chrylis

+0

我在MS SQL中手動執行查詢,它工作正常,並返回真正的元組! –

+0

而這與Hibernate具有完全相同的憑證? – chrylis

回答

1

正如你所提到的,唯一約束拋出異常。我認爲你執行的查詢與你執行的本地查詢不一樣,或者你有一個字符集問題。

+0

謝謝,我有字符集問題。我改變了從波斯語到英語的財產價值,所以它的固定。 –