0

当我尝试使用 @lob 字符串持久化实体时出现错误。我记得那部分代码运行良好,我根本不记得改变它。我很困惑。这是我的错误:

错误 30 04 12 23:50:31 [org.hibernate.util.JDBCExceptionReporter] => 起始位置 [1] 不能超过总 CLOB 长度 [0] com.vaadin.event.ListenerMethod$MethodException 原因:javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException:无法插入:[life.domain_model.Post] at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:507) at com.vaadin.event.EventRouter.fireEvent(EventRouter.java :161) 在 com.vaadin.ui.AbstractComponent.fireEvent(AbstractComponent.java:1154) 在 com.vaadin.ui.Button.fireClick(Button.java:371) 在 com.vaadin.ui.Button.changeVariables(Button. java:193) 在 com.vaadin.terminal.gwt.server.AbstractCommunicationManager 的 com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariables(AbstractCommunicationManager.java:1094)。doHandleUidlRequest(AbstractCommunicationManager.java:590) 在 com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest(CommunicationManager.java:266) 在 com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:476)在 org.vaadin.navigator7.NavigableApplicationServlet.service(NavigableApplicationServlet.java:46) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java :290) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 在 org.apache.catalina.core 的 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)。 StandardContextValve.invoke(StandardContextValve.java:191) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve. java:109) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 在 org.apache.coyote.http11 .Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Unknown Source) :javax.persistence.PersistenceException:org.hibernate.exception.GenericJDBCException:无法在org.hibernate.ejb.AbstractEntityManagerImpl插入:[life.domain_model.Post]。convert(AbstractEntityManagerImpl.java:1214) at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147) at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1153) at org.hibernate.ejb.AbstractEntityManagerImpl .merge(AbstractEntityManagerImpl.java:695) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 在 java.lang。 reflect.Method.invoke(Unknown Source) at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240) at $Proxy29.merge(Unknown Source) at life.dao.ForumDao.merge(ForumDao. java:24) 在 life.dao。ForumDao$$FastClassByCGLIB$$6eb7cb5f.invoke() at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149) at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688) ) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 在 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) 在 org.springframework.aop.framework.ReflectiveMethodInvocation。在 life.dao.ForumDao 的 org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621) 继续(ReflectiveMethodInvocation.java:172)在 life.dao$$EnhancerByCGLIB$$8ecdd1fd.merge()。 ForumDaoImpl.mergeDiscussion(ForumDaoImpl.java:29) 在 life.dao.ForumDaoImpl。saveNewPostForDiscussion(ForumDaoImpl.java:50) at life.dao.ForumDaoImpl$$FastClassByCGLIB$$6d37da1f.invoke() at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149) at org.springframework.aop。 framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java: 110) 在 org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621) 在 life.dao.ForumDaoImpl$$ 的 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) EnhancerByCGLIB$66b0b0bd。saveNewPostForDiscussion() at life.ui.layouts.ForumEditorLayout.replyToDiscussion(ForumEditorLayout.java:112) at life.ui.layouts.ForumEditorLayout$3.buttonClick(ForumEditorLayout.java:84) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod .java:487) ... 22 更多原因:org.hibernate.exception.GenericJDBCException:无法插入:[life.domain_model.Post] at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140) at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128) 在 org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 在 org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64) 在 org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java: 2327) 在 org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71) 在 org.hibernate.engine.ActionQueue.execute(ActionQueue) 的 org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2834) .java:273) 在 org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203) 在 org.hibernate.event. def.AbstractSaveEventListener。saveWithGeneratedId(AbstractSaveEventListener.java:129) at org.hibernate.ejb.event.EJB3MergeEventListener.saveWithGeneratedId(EJB3MergeEventListener.java:62) at org.hibernate.event.def.DefaultMergeEventListener.saveTransientEntity(DefaultMergeEventListener.java:415) at org.hibernate .event.def.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:341) at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:303) at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java :258) 在 org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:877) 在 org.hibernate.impl.SessionImpl.merge(SessionImpl.java:859) 在 org.hibernate.engine.CascadingAction$6.cascade(CascadingAction .java:279) 在 org.hibernate.engine。Cascade.cascadeToOne(Cascade.java:392) 在 org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335) 在 org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204) 在 org.hibernate.engine .Cascade.cascadeCollectionElements(Cascade.java:425) 在 org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:362) 在 org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:338) 在 org.hibernate。 engine.Cascade.cascadeProperty(Cascade.java:204) at org.hibernate.engine.Cascade.cascade(Cascade.java:161) at org.hibernate.event.def.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:630) at org .hibernate.event.def.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:490) 在 org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:255) 在 org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:867) 在 org.hibernate.impl.SessionImpl.merge(SessionImpl) 的 org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:84) .java:851) at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:855) at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:686) ... 54 更多原因:java.sql .SQLException:开始位置 [1] 不能超过 org.hibernate.engine.jdbc.ClobProxy.invoke(ClobProxy.java:146) 处的总 CLOB 长度 [0],位于 com.mysql.jdbc 的 $Proxy36.getSubString(Unknown Source) .PreparedStatement.setClob(PreparedStatement.java:3553) 在 org.apache.commons.dbcp.DelegatingPreparedStatement.setClob(DelegatingPreparedStatement.java:187) 在 org.apache.commons.dbcp。DelegatingPreparedStatement.setClob(DelegatingPreparedStatement.java:187) at org.hibernate.type.descriptor.sql.ClobTypeDescriptor$1.doBind(ClobTypeDescriptor.java:60) at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java :89) at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:282) at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:277) at org.hibernate.type.AbstractSingleColumnStandardBasicType.nullSafeardBasicTypeStand java:85) 在 org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2143) 在 org.hibernate.persister.entity 的 org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2166) .AbstractEntityPersister$4.bindValues(AbstractEntityPersister.java:2321) at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:56) ... 85 更多

这是 Post 实体:

@Entity
public class Post {
    @Id @GeneratedValue
    private Long id;
    @ManyToOne @JoinColumn(name = "owner_id")
    private User owner;
    @ManyToOne @JoinColumn(name = "editer_id")
    private User lastEditer;
    private Date creationDate;
    private Date lastEditionDate;
    @Lob
    private String content;
    @ManyToOne @JoinColumn(name = "discussion_id")
    private Discussion discussion;

    public Post(){

    }
    public Post(User owner,String content){
        this.owner = owner;
        this.lastEditer = null;
        Date curent = new Date();
        this.creationDate = curent;
        this.lastEditionDate = curent;
        this.content = content;
        this.discussion = null;
    }


    //G&S
....

无论字符串内容长度如何,我都会收到错误消息。我仍在使用 hibernate 3.6.0 和 MySql 5.5 ( + spring )。谁能告诉我如何纠正这个问题?

4

1 回答 1

2

在尝试将空字符串保存到使用 @Lob 注释的字段时,我遇到了同样的问题。发现了这个漏洞:https ://hibernate.onjira.com/browse/HHH-5704

我的项目隐含包含 Hibernate 核心版本 3.6.0,一旦我更新 POM 以明确包含核心版本 3.6.10,它就开始按预期工作。

票很好地解释了这个问题。

于 2012-07-20T23:01:56.837 回答