Hibernate @Lob аннотация больше не работает: не может превышать общую длину CLOB с помощью нескольких строк?

У меня возникает ошибка, когда я пытаюсь сохранить объект с помощью строки @lob. Я помню, что часть кода работала хорошо, и я вообще не помню, чтобы ее меняли. Я смущен. Вот что у меня за ошибка:

и это объект Post:

Я получаю сообщение об ошибке независимо от длины содержимого строки. Я все еще использую hibernate 3.6.0 и MySql 5.5 (+ spring). Кто-нибудь может сказать мне, как это исправить?

@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
....

Я столкнулся с этой же проблемой при попытке сохранить пустые строки в поле с аннотацией @Lob. Обнаружена эта ошибка: https://hibernate.onjira.com/browse/HHH-5704


person anti    schedule 30.04.2012    source источник


Ответы (1)


Мой проект неявно включал основную версию Hibernate 3.6.0, и как только я обновил POM, чтобы явно включить основную версию 3.6.10, он просто начал работать, как и ожидалось.

Билет очень хорошо объясняет проблему.

ОШИБКА 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] в com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:507) в 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.handleVariables(AbstractCommunicationManager.java:1094) в com.vaadin.terminal.gwt.server.AbstractCommunicationManager.doHandleUidlRequest(AbstractCommunicationManager.java:590) в com.vaadin .terminal.gwt.server.CommunicationManager.handleUidlRequest(Communication ationManager.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.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) в org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) в org.apache.catalina.core.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 .соединять or.CoyoteAdapter.service(CoyoteAdapter.java:298) в org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) в org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java: 588) в org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) в java.lang.Thread.run(неизвестный источник) Причина: javax.persistence.PersistenceException: org.hibernate. exception.GenericJDBCException: не удалось вставить: [life.domain_model. Post] в org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214) в org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147) в org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl. :1153) в org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:695) в sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl .invoke(неизвестный источник) в java.lang.reflect.Method.invoke(неизвестный источник) в org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240) в $Proxy29.merge(неизвестный источник) на life.dao.ForumDao.merge(ForumDao.java:24) на life.dao.ForumDao$$FastClassByCGLIB$$6eb7cb5f.invoke() на net.sf.cglib.proxy.MethodProxy.invoke(MethodPr oxy.java:149) в 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.proceed(ReflectiveMethodInvocation.java:172) в org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy .java:621) на сайте life.dao.ForumDao$$EnhancerByCGLIB$$8ecdd1fd.merge() на сайте life.dao.ForumDaoImpl.mergeDiscussion(ForumDaoImpl.java:29) на сайте life.dao.ForumDaoImpl.saveNewPostForDiscussion(ForumDaoImpl.java:50) ) в life.dao.ForumDaoImpl$$FastClassByCGLIB$$6d37da1f.invoke() в net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149) в org.springframework.aop.framework.Cglib2AopProxy$CglibMetho dInvocation.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.proceed(ReflectiveMethodInvocation.java:172) в org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621) в life.dao. ForumDaoImpl$$EnhancerByCGLIB$$66b0b0bd.saveNewPostForDiscussion() в life.ui.layouts.ForumEditorLayout.replyToDiscussion(ForumEditorLayout.java:112) в life.ui.layouts.ForumEditorLayout$3.buttonClick(ForumEditorLayout.java:84) в sun.reflect .NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke (неизвестный источник) в java.lang.reflect.Method.invoke (неизвестный источник) в com.vaadin .event.ListenerMethod.receiveEvent(ListenerMethod.java:487) ... еще 22 Причина: org.hibernate.exception.GenericJDBCException: не удалось вставить: [life.domain_model.Post] в org.hibernate.exception.SQLStateConverter.handledNonSpecificException (SQLStateConverter.java:140) в 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.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java: 2834) в org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71) в org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273) в org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener .java:320) в org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203) в org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129) в org.hibernate.ejb. event.EJB3MergeEventListener.saveWithGeneratedId(EJB3MergeEventListener.java:62) в org.hibernate.event.def.DefaultMergeEventListener.saveTransientEntity(по умолчанию MergeEventListener.java:415) в org.hibernate.event.def.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:341) в org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:303) в 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. спящий режим.двигатель. 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) в org.hibernate.engine.Cascade.cascade(Cascade.java:161) в org. hibernate.event.def.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:630) в org.hibernate.event.def.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:490) в org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener. java:255) в org.hibernate.event.def.DefaultMergeEventListe ner.onMerge(DefaultMergeEventListener.java:84) в org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:867) в org.hibernate.impl.SessionImpl.merge(SessionImpl.java:851) в org.hibernate.impl .SessionImpl.merge(SessionImpl.java:855) в org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:686) ... еще 54 Причина: java.sql.SQLException: Начальная позиция [1] не может превышать общую Длина CLOB [0] в org.hibernate.engine.jdbc.ClobProxy.invoke(ClobProxy.java:146) в $Proxy36.getSubString(неизвестный источник) в com.mysql.jdbc.PreparedStatement.setClob(PreparedStatement.java:3553) на org.apache.commons.dbcp.DelegatingPreparedStatement.setClob(DelegatingPreparedStatement.java:187) на org.apache.commons.dbcp.DelegatingPreparedStatement.setClob(DelegatingPreparedStatement.java:187) на org.hibernate.type.descriptor.sql.ClobTypeDescriptor $1.doBind(ClobTypeDescriptor.java:60) в org.hibernate.type.descripto r.sql.BasicBinder.bind(BasicBinder.java:89) в org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:282) в org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:277) в org .hibernate.type.AbstractSingleColumnStandardBasicType.nullSafeSet(AbstractSingleColumnStandardBasicType.java:85) в org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2166) в org.hibernate.persister.entity. AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2143) в org.hibernate.persister.entity.AbstractEntityPersister$4.bindValues(AbstractEntityPersister.java:2321) в org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:56) . .. еще 85

person singebete    schedule 20.07.2012