2014-09-30 94 views
0

這是完整的堆棧跟蹤。我檢查了我所有的表格和列,他們正確映射。 不休眠自動創建連接表呢?因爲我不希望這樣的表?我也將無法訪問在DBorg.hibernate.exception.SQLGrammarException:無法初始化集合:

19:06:01,444 WARN [org.hibernate.util.JDBCExceptionReporter] (ajp--0.0.0.0-8016-3) SQL Error: 972, SQLState: 42000 
 
19:06:01,444 ERROR [org.hibernate.util.JDBCExceptionReporter] (ajp--0.0.0.0-8016-3) ORA-00972: identifier is too long 
 

 
19:06:01,459 ERROR [stderr] (ajp--0.0.0.0-8016-3) org.hibernate.exception.SQLGrammarException: could not initialize a collection: [com.lv.rs.accessautomation.common.vo.QuoteUserInfoVO.quoteUserRoleVO#component[ssoId,quoteId]{quoteId=1, ssoId=LOPJS}] 
 
19:06:01,460 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92) 
 
19:06:01,460 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
 
19:06:01,460 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.hibernate.loader.Loader.loadCollection(Loader.java:2173) 
 
19:06:01,460 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:62) 
 
19:06:01,460 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:627) 
 
19:06:01,460 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:83) 
 
19:06:01,461 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1863) 
 
19:06:01,461 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:369) 
 
19:06:01,461 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:111) 
 
19:06:01,461 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.hibernate.collection.PersistentSet.toString(PersistentSet.java:332) 
 
19:06:01,461 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at java.lang.String.valueOf(String.java:2854) 
 
19:06:01,461 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at java.lang.StringBuilder.append(StringBuilder.java:128) 
 
19:06:01,462 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at com.lv.rs.accessautomation.common.vo.QuoteUserInfoVO.toString(QuoteUserInfoVO.java:85) 
 
19:06:01,462 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at java.lang.String.valueOf(String.java:2854) 
 
19:06:01,462 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at java.lang.StringBuilder.append(StringBuilder.java:128) 
 
19:06:01,462 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at java.util.AbstractCollection.toString(AbstractCollection.java:450) 
 
19:06:01,462 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at java.lang.String.valueOf(String.java:2854) 
 
19:06:01,462 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at java.lang.StringBuilder.append(StringBuilder.java:128) 
 
19:06:01,462 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at com.lv.rs.accessautomation.business.service.impl.AccessServiceImpl.saveQuotesUser(AccessServiceImpl.java:138) 
 
19:06:01,463 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at com.lv.rs.accessautomation.business.service.impl.AccessServiceImpl.saveUser(AccessServiceImpl.java:114) 
 
19:06:01,463 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
 
19:06:01,463 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
 
19:06:01,463 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
 
19:06:01,463 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at java.lang.reflect.Method.invoke(Method.java:601) 
 
19:06:01,463 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309) 
 
19:06:01,463 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
 
19:06:01,464 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
 
19:06:01,464 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) 
 
19:06:01,464 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
 
19:06:01,464 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 
 
19:06:01,464 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at $Proxy252.saveUser(Unknown Source) 
 
19:06:01,464 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at com.lv.rs.accessautomation.view.controller.AutomationController.doActions(AutomationController.java:74) 
 
19:06:01,465 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
 
19:06:01,465 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
 
19:06:01,465 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
 
19:06:01,465 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at java.lang.reflect.Method.invoke(Method.java:601) 
 
19:06:01,465 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
 
19:06:01,465 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436) 
 
19:06:01,466 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424) 
 
19:06:01,466 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
 
19:06:01,466 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
 
19:06:01,466 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) 
 
19:06:01,466 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:585) 
 
19:06:01,466 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) 
 
19:06:01,467 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 
 
19:06:01,467 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) 
 
19:06:01,467 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) 
 
19:06:01,467 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) 
 
19:06:01,467 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) 
 
19:06:01,467 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) 
 
19:06:01,468 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) 
 
19:06:01,468 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
 
19:06:01,468 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
 
19:06:01,468 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) 
 
19:06:01,468 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:505) 
 
19:06:01,468 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:445) 
 
19:06:01,469 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) 
 
19:06:01,469 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at java.lang.Thread.run(Thread.java:722) 
 
19:06:01,469 ERROR [stderr] (ajp--0.0.0.0-8016-3) Caused by: java.sql.SQLSyntaxErrorException: ORA-00972: identifier is too long 
 
19:06:01,469 ERROR [stderr] (ajp--0.0.0.0-8016-3) 
 
19:06:01,469 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440) 
 
19:06:01,469 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396) 
 
19:06:01,469 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:837) 
 
19:06:01,469 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:445) 
 
19:06:01,470 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191) 
 
19:06:01,470 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523) 
 
19:06:01,470 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207) 
 
19:06:01,470 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:862) 
 
19:06:01,470 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1153) 
 
19:06:01,470 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1275) 
 
19:06:01,470 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3576) 
 
19:06:01,471 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3620) 
 
19:06:01,471 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1491) 
 
19:06:01,471 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208) 
 
19:06:01,471 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.hibernate.loader.Loader.getResultSet(Loader.java:1953) 
 
19:06:01,471 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.hibernate.loader.Loader.doQuery(Loader.java:802) 
 
19:06:01,471 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) 
 
19:06:01,472 ERROR [stderr] (ajp--0.0.0.0-8016-3) \t at org.hibernate.loader.Loader.loadCollection(Loader.java:2166)

蔭創建一個表作出許多人可能兩個表之間的關係,但我不希望生成任何字段像主鍵或有連接表。但是,如果我運行我的代碼ti得到貝沃例外。

19:06:01,444 WARN [org.hibernate.util.JDBCExceptionReporter] (ajp--0.0.0.0-8016-3) SQL Error: 972, SQLState: 42000 
19:06:01,444 ERROR [org.hibernate.util.JDBCExceptionReporter] (ajp--0.0.0.0-8016-3) ORA-00972: identifier is too long 

19:06:01,459 ERROR [stderr] (ajp--0.0.0.0-8016-3) org.hibernate.exception.SQLGrammarException: could not initialize a collection: 

/** 
 
* 
 
*/ 
 

 

 
import java.io.Serializable; 
 
import java.util.HashSet; 
 
import java.util.Set; 
 

 
import javax.persistence.Column; 
 
import javax.persistence.Entity; 
 
import javax.persistence.Id; 
 
import javax.persistence.ManyToMany; 
 
import javax.persistence.Table; 
 

 
    
 
@Entity 
 
@Table(name="QT_USER_ROLE") 
 
public class QuoteUserRoleVO implements Serializable{ 
 
\t 
 
\t /** 
 
\t * 
 
\t */ 
 
\t private static final long serialVersionUID = 1L; 
 
\t @Id 
 
\t @Column(name = "SSO_ID") 
 
\t private String ssoId; 
 
\t @Id 
 
\t @Column(name = "QUOTE_TYPE_ID") 
 
\t private int quoteId; 
 
\t @Id 
 
\t @Column(name = "ROLE_ID") 
 
\t private int roleId; 
 
\t @Column(name = "ADMINISTRATOR_FLG") 
 
\t private String adminFlg; 
 
\t @Column(name = "UNDERWRITER_FLG") 
 
\t private String underWriterFlg; 
 
\t 
 
\t @ManyToMany(mappedBy="quoteUserRoleVO") 
 
\t private Set<QuoteUserInfoVO> quoteUserInfoVO = new HashSet<QuoteUserInfoVO>(); 
 
\t 
 
\t public String getSsoId() { 
 
\t \t return ssoId; 
 
\t } 
 
\t public void setSsoId(String ssoId) { 
 
\t \t this.ssoId = ssoId; 
 
\t } 
 
\t public int getQuoteId() { 
 
\t \t return quoteId; 
 
\t } 
 
\t public void setQuoteId(int quoteId) { 
 
\t \t this.quoteId = quoteId; 
 
\t } 
 
\t public int getRoleId() { 
 
\t \t return roleId; 
 
\t } 
 
\t public void setRoleId(int roleId) { 
 
\t \t this.roleId = roleId; 
 
\t } 
 
\t public String getAdminFlg() { 
 
\t \t return adminFlg; 
 
\t } 
 
\t public void setAdminFlg(String adminFlg) { 
 
\t \t this.adminFlg = adminFlg; 
 
\t } 
 
\t public String getUnderWriterFlg() { 
 
\t \t return underWriterFlg; 
 
\t } 
 
\t public void setUnderWriterFlg(String underWriterFlg) { 
 
\t \t this.underWriterFlg = underWriterFlg; 
 
\t } 
 
\t public Set<QuoteUserInfoVO> getQuoteUserInfoVO() { 
 
\t \t return quoteUserInfoVO; 
 
\t } 
 
\t public void setQuoteUserInfoVO(Set<QuoteUserInfoVO> quoteUserInfoVO) { 
 
\t \t this.quoteUserInfoVO = quoteUserInfoVO; 
 
\t } 
 
\t @Override 
 
\t public String toString() { 
 
\t \t return "QuoteUserRoleVO [ssoId=" + ssoId + ", quoteId=" + quoteId 
 
\t \t \t \t + ", roleId=" + roleId + ", adminFlg=" + adminFlg 
 
\t \t \t \t + ", underWriterFlg=" + underWriterFlg + "]"; 
 
\t } 
 
\t 
 
\t 
 

 
}
/** 
 
* 
 
*/ 
 

 

 
import java.io.Serializable; 
 
import java.util.HashSet; 
 
import java.util.Set; 
 

 
import javax.persistence.CascadeType; 
 
import javax.persistence.Column; 
 
import javax.persistence.Entity; 
 
import javax.persistence.Id; 
 
import javax.persistence.JoinTable; 
 
import javax.persistence.ManyToMany; 
 
import javax.persistence.Table; 
 

 

 
@Entity 
 
@Table(name="QT_USER_INFORMATION") 
 
public class QuoteUserInfoVO implements Serializable{ 
 
\t 
 
\t /** 
 
\t * 
 
\t */ 
 
\t private static final long serialVersionUID = 1L; 
 
\t 
 
\t @Id 
 
\t @Column(name = "SSO_ID") 
 
\t private String ssoId; 
 
\t @Id 
 
\t @Column(name = "QUOTE_TYPE_ID") 
 
\t private int quoteId; 
 
\t @Column(name = "FORENAME_TXT") 
 
\t private String forename; 
 
\t @Column(name = "SURNAME_TXT") 
 
\t private String surname; 
 
\t @Column(name = "ACTIVE_FLG") 
 
\t private String activeFlag; 
 
\t 
 
\t @ManyToMany(cascade = {CascadeType.ALL}) 
 
\t private Set<QuoteUserRoleVO> quoteUserRoleVO = new HashSet<QuoteUserRoleVO>(); 
 
\t 
 
\t public String getSsoId() { 
 
\t \t return ssoId; 
 
\t } 
 
\t public void setSsoId(String ssoId) { 
 
\t \t this.ssoId = ssoId; 
 
\t } 
 
\t public int getQuoteId() { 
 
\t \t return quoteId; 
 
\t } 
 
\t public void setQuoteId(int quoteId) { 
 
\t \t this.quoteId = quoteId; 
 
\t } 
 
\t public String getForename() { 
 
\t \t return forename; 
 
\t } 
 
\t public void setForename(String forename) { 
 
\t \t this.forename = forename; 
 
\t } 
 
\t public String getSurname() { 
 
\t \t return surname; 
 
\t } 
 
\t public void setSurname(String surname) { 
 
\t \t this.surname = surname; 
 
\t } 
 
\t public String getActiveFlag() { 
 
\t \t return activeFlag; 
 
\t } 
 
\t public void setActiveFlag(String activeFlag) { 
 
\t \t this.activeFlag = activeFlag; 
 
\t } 
 
\t public Set<QuoteUserRoleVO> getQuoteUserRoleVO() { 
 
\t \t return quoteUserRoleVO; 
 
\t } 
 
\t public void setQuoteUserRoleVO(Set<QuoteUserRoleVO> quoteUserRoleVO) { 
 
\t \t this.quoteUserRoleVO = quoteUserRoleVO; 
 
\t } 
 
\t @Override 
 
\t public String toString() { 
 
\t \t return "QuoteUserInfoVO [ssoId=" + ssoId + ", quoteId=" + quoteId 
 
\t \t \t \t + ", forename=" + forename + ", surname=" + surname 
 
\t \t \t \t + ", activeFlag=" + activeFlag + ", quoteUserRoleVO=" 
 
\t \t \t \t + quoteUserRoleVO + "]"; 
 
\t } 
 
\t 
 
\t 
 

 
}

+0

檢查你的列名/表名。這是錯誤來自何處,我猜 – Satya 2014-09-30 18:19:52

+0

張貼完整的堆棧跟蹤。沒有連接表的ManyToMany是不可能的。 – 2014-09-30 18:20:01

回答

0

根本問題在這裏似乎是 「ORA-00972:標識過長的錯誤」。由於您試圖使用hibernate orm訪問oracle數據庫,因此hibernate生成的隱式sql可能具有長度大於30的標識符。由於上述域對象中的某些字段具有@ManyToMany關聯,因此爲聯接生成的sql可能具有更大的長度標識符。

要解決這個問題,你可以嘗試使用較小的標識符名稱,因爲連接通常會創建<TABLE1_NAME>_<FIELD1_NAME>_<TABLE2_NAME>_<FIELD2_NAME>的標識符,這明顯超過了上述域實體的長度30。

解決此問題的另一種方法是通過在Hibernate中實現NamingStratefy接口(javadocs:https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/cfg/class-use/NamingStrategy.html)來使用CustomerNamingStrategy進行休眠。

對於Oracle特定的自定義命名策略,請查看https://code.google.com/p/hibernate-naming-strategy-for-oracle/downloads/list上的示例代碼。

希望這有助於!

相關問題