2017-02-15 71 views
0

當我調用Session.persist傳遞一個帶有多個問號的String屬性的實體對象時,我得到如下所示的異常。Session.persist期間的Hibernate異常當String字段包含問號時

由於hibernate在準備好的語句中使用問號作爲值佔位符,因此會出現異常。

有人會知道這個問題的解決辦法嗎?

這裏的觸發異常的對象的字符串表示:

WcmsPart [MPN = 04EAC2 ??? 16-001,CPN = NULL,描述= PRIMER 聚氨酯漆,數量= 1,...]

並且在下面的例外。感謝您的建議

Exception: org.hibernate.exception.ConstraintViolationException: could not execute statement 

Stack Trace: 
org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:129) 
org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) 
org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126) 
org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112) 
org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:211) 
org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:62) 
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3124) 
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3581) 
org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:104) 
org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:465) 
org.hibernate.engine.spi.ActionQueue.executeInserts(ActionQueue.java:337) 
org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:176) 
org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:216) 
org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:334) 
org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:289) 
org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:195) 
org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126) 
org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:206) 
org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:149) 
org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:75) 
org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:811) 
org.hibernate.internal.SessionImpl.persist(SessionImpl.java:784) 
org.hibernate.internal.SessionImpl.persist(SessionImpl.java:789) 
+0

請隨附查詢,您正在調用..所有參數設置 –

+0

我簡單地調用'session.persist(wcmsPart);' –

回答

0

問號應該是Hibernate/SQL中的一個參數。所以你需要逃避它,然後再堅持你的數據

+0

謝謝!任何想法我將如何逃避這個字符串'04EAC2? 16-001' ? –

+0

字符串上的replaceAll會有所幫助 – DamCx

相關問題