简体   繁体   English

JPA(Hibernate)与List创建有序的一对多关系

[英]JPA (Hibernate) creating ordered one to many relationship with List

I'm trying to have bi-directional relationship using JPA 2 (with Hibernate) with ordered many side (using List). 我正在尝试使用JPA 2(与Hibernate)和有序的多方面(使用List)建立双向关系。

Based on problems reported with @OneToMany(mappedBy on: 基于@OneToMany(mappedBy on报告的问题:
JPA 2.0 @OrderColumn annotation in Hibernate 3.5 Hibernate 3.5中的JPA 2.0 @OrderColumn批注
and
https://hibernate.onjira.com/browse/HHH-5732 https://hibernate.onjira.com/browse/HHH-5732

I tried different approach, proposed on: 我尝试了不同的方法,提出了以下建议:
http://josian.wordpress.com/2006/09/09/hibernate-annotations-bidirectional-one-to-many/ http://josian.wordpress.com/2006/09/09/hibernate-annotations-bidirectional-one-to-many/

However when persisting data I'm getting exception. 但是,当持久化数据时,我遇到了异常。

Consider following entity classes: 考虑以下实体类:

@Entity
public class Schedule implements Serializable {
    private List<Presentation> presentations;
    private String name = null;

    ...

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
    @JoinColumn (name = "SCHEDULE_NAME")
    @IndexColumn(name = "PRESENTATION_POSITION")
    public List<Presentation> getPresentations() {
        return presentations;
    }

    @Id
    @NotNull
    @Index(name = "ScheduleNameIdx")
    @Column(name = "SCHEDULE_NAME")
    public String getName() {
        return name;
    }

...
}

@Entity
public class Presentation implements Serializable {
    private Long id;
    private Schedule schedule;

    ...

    @Id
    @GeneratedValue
    @Index(name = "PresentationIdIdx")
    @Column(name = "PRESENTATION_ID")
    public Long getId() {
        return id;
    }

    @ManyToOne(optional = false)
    @JoinColumn(name="SCHEDULE_NAME", nullable = false, updatable = false, insertable = false)
    public Schedule getSchedule() {
        return schedule;
    }
...
}

Exception I get is: 我得到的异常是:

07:39:43.265 [12937429@qtp-9708927-7] DEBUG o.h.util.JDBCExceptionReporter - could not insert: [com.google.code.yourpresenter.entity.Presentation] [insert into Presentation (PRESENTATION_ID, bgImage_id, media_id, name, song_id) values (default, ?, ?, ?, ?)]
java.sql.SQLIntegrityConstraintViolationException: integrity constraint violation: NOT NULL check constraint; SYS_CT_10066 table: PRESENTATION column: SCHEDULE_NAME
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source) ~[hsqldb-2.2.6.jar:2.2.6]
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source) ~[hsqldb-2.2.6.jar:2.2.6]
    at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source) ~[hsqldb-2.2.6.jar:2.2.6]
    at org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(Unknown Source) ~[hsqldb-2.2.6.jar:2.2.6]
    at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94) ~[hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57) ~[hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2345) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2852) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:320) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.ejb.event.EJB3MergeEventListener.saveWithGeneratedId(EJB3MergeEventListener.java:62) [hibernate-entitymanager-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.event.def.DefaultMergeEventListener.saveTransientEntity(DefaultMergeEventListener.java:415) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.event.def.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:341) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:303) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:258) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:877) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:859) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:279) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:425) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:362) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:338) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.engine.Cascade.cascade(Cascade.java:161) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.event.def.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:630) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.event.def.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:490) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:255) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:84) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:867) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:851) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:855) [hibernate-core-3.6.7.Final.jar:3.6.7.Final]
    at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:686) [hibernate-entitymanager-3.6.7.Final.jar:3.6.7.Final]
    at sun.reflect.GeneratedMethodAccessor20.invoke(Unknown Source) ~[na:na]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[na:1.6.0_15]
    at java.lang.reflect.Method.invoke(Method.java:597) ~[na:1.6.0_15]
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240) [spring-orm-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at $Proxy34.merge(Unknown Source) [na:na]
    at com.google.code.yourpresenter.service.ScheduleServiceImpl.persist(ScheduleServiceImpl.java:71) [classes/:na]
    at com.google.code.yourpresenter.service.ScheduleServiceImpl.addPresentation(ScheduleServiceImpl.java:122) [classes/:na]
    at com.google.code.yourpresenter.service.ScheduleServiceImpl$$FastClassByCGLIB$$52d414d3.invoke(<generated>) [cglib-2.2.2.jar:na]
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) [cglib-2.2.2.jar:na]
    at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:689) [spring-aop-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) [spring-aop-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:155) [spring-tx-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) [spring-aop-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) [spring-tx-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) [spring-aop-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622) [spring-aop-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at com.google.code.yourpresenter.service.ScheduleServiceImpl$$EnhancerByCGLIB$$9dfe2fc9.addPresentation(<generated>) [cglib-2.2.2.jar:na]
    at com.google.code.yourpresenter.view.ScheduleView.dropped(ScheduleView.java:154) [classes/:na]
    at com.google.code.yourpresenter.view.ScheduleView.dropped(ScheduleView.java:92) [classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.6.0_15]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) ~[na:1.6.0_15]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[na:1.6.0_15]
    at java.lang.reflect.Method.invoke(Method.java:597) ~[na:1.6.0_15]
    at com.sun.el.parser.AstValue.invoke(AstValue.java:187) [jsp-2.1-glassfish-2.1.v20091210.jar:na]
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297) [jsp-2.1-glassfish-2.1.v20091210.jar:na]
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
    at org.richfaces.event.MethodExpressionDropListener.processDrop(MethodExpressionDropListener.java:45) [richfaces-components-ui-4.2.2.Final.jar:4.2.2.Final]
    at org.richfaces.event.DropEvent.processListener(DropEvent.java:69) [richfaces-components-api-4.2.2.Final.jar:4.2.2.Final]
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769) [jsf-api-2.1.0.jar:2.1.0-FCS]
    at org.richfaces.component.AbstractDropTarget.broadcast(AbstractDropTarget.java:123) [richfaces-components-ui-4.2.2.Final.jar:4.2.2.Final]
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) [jsf-api-2.1.0.jar:2.1.0-FCS]
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) [jsf-api-2.1.0.jar:2.1.0-FCS]
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409) [jsf-api-2.1.0.jar:2.1.0-FCS]
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) [jetty-6.1.26.jar:6.1.26]
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1221) [jetty-6.1.26.jar:6.1.26]
    at com.google.code.yourpresenter.filter.ScheduleSelectedFilter.doFilter(ScheduleSelectedFilter.java:47) [classes/:na]
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) [spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) [spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212) [jetty-6.1.26.jar:6.1.26]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) [spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) [spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212) [jetty-6.1.26.jar:6.1.26]
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399) [jetty-6.1.26.jar:6.1.26]
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) [jetty-6.1.26.jar:6.1.26]
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) [jetty-6.1.26.jar:6.1.26]
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) [jetty-6.1.26.jar:6.1.26]
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450) [jetty-6.1.26.jar:6.1.26]
    at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) [jetty-6.1.26.jar:6.1.26]
    at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) [jetty-6.1.26.jar:6.1.26]
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) [jetty-6.1.26.jar:6.1.26]
    at org.mortbay.jetty.Server.handle(Server.java:326) [jetty-6.1.26.jar:6.1.26]
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) [jetty-6.1.26.jar:6.1.26]
    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945) [jetty-6.1.26.jar:6.1.26]
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756) [jetty-6.1.26.jar:6.1.26]
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) [jetty-6.1.26.jar:6.1.26]
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) [jetty-6.1.26.jar:6.1.26]
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410) [jetty-6.1.26.jar:6.1.26]
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) [jetty-util-6.1.26.jar:6.1.26]
Caused by: org.hsqldb.HsqlException: integrity constraint violation: NOT NULL check constraint; SYS_CT_10066 table: PRESENTATION column: SCHEDULE_NAME
    at org.hsqldb.error.Error.error(Unknown Source) ~[hsqldb-2.2.6.jar:2.2.6]
    at org.hsqldb.Table.enforceRowConstraints(Unknown Source) ~[hsqldb-2.2.6.jar:2.2.6]
    at org.hsqldb.Table.insertSingleRow(Unknown Source) ~[hsqldb-2.2.6.jar:2.2.6]
    at org.hsqldb.StatementDML.insertRowSet(Unknown Source) ~[hsqldb-2.2.6.jar:2.2.6]
    at org.hsqldb.StatementInsert.getResult(Unknown Source) ~[hsqldb-2.2.6.jar:2.2.6]
    at org.hsqldb.StatementDMQL.execute(Unknown Source) ~[hsqldb-2.2.6.jar:2.2.6]
    at org.hsqldb.Session.executeCompiledStatement(Unknown Source) ~[hsqldb-2.2.6.jar:2.2.6]
    at org.hsqldb.Session.execute(Unknown Source) ~[hsqldb-2.2.6.jar:2.2.6]
    ... 96 common frames omitted
07:39:43.265 [12937429@qtp-9708927-7] WARN  o.h.util.JDBCExceptionReporter - SQL Error: -10, SQLState: 23502
07:39:43.265 [12937429@qtp-9708927-7] ERROR o.h.util.JDBCExceptionReporter - integrity constraint violation: NOT NULL check constraint; SYS_CT_10066 table: PRESENTATION column: SCHEDULE_NAME
07:39:43.265 [12937429@qtp-9708927-7] DEBUG o.h.ejb.AbstractEntityManagerImpl - mark transaction for rollback
07:39:43.265 [12937429@qtp-9708927-7] DEBUG o.s.orm.jpa.JpaTransactionManager - Initiating transaction rollback
07:39:43.265 [12937429@qtp-9708927-7] DEBUG o.s.orm.jpa.JpaTransactionManager - Rolling back JPA transaction on EntityManager [org.hibernate.ejb.EntityManagerImpl@b840d2]
07:39:43.265 [12937429@qtp-9708927-7] DEBUG o.h.transaction.JDBCTransaction - rollback
07:39:43.265 [12937429@qtp-9708927-7] DEBUG o.h.transaction.JDBCTransaction - re-enabling autocommit
07:39:43.265 [12937429@qtp-9708927-7] DEBUG o.h.transaction.JDBCTransaction - rolled back JDBC Connection
07:39:43.265 [12937429@qtp-9708927-7] DEBUG org.hibernate.jdbc.ConnectionManager - aggressively releasing JDBC connection
07:39:43.265 [12937429@qtp-9708927-7] DEBUG org.hibernate.jdbc.ConnectionManager - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
07:39:43.265 [12937429@qtp-9708927-7] DEBUG o.s.orm.jpa.JpaTransactionManager - Closing JPA EntityManager [org.hibernate.ejb.EntityManagerImpl@b840d2] after transaction
07:39:43.265 [12937429@qtp-9708927-7] DEBUG o.s.o.jpa.EntityManagerFactoryUtils - Closing JPA EntityManager
19.8.2012 7:39:43 com.sun.faces.lifecycle.InvokeApplicationPhase execute
WARNING: /presenter/presenter.xhtml @302,44 dropListener="#{scheduleView.dropped}": org.springframework.dao.DataIntegrityViolationException: could not insert: [com.google.code.yourpresenter.entity.Presentation]; SQL [insert into Presentation (PRESENTATION_ID, bgImage_id, media_id, name, song_id) values (default, ?, ?, ?, ?)]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not insert: [com.google.code.yourpresenter.entity.Presentation]
javax.el.ELException: /presenter/presenter.xhtml @302,44 dropListener="#{scheduleView.dropped}": org.springframework.dao.DataIntegrityViolationException: could not insert: [com.google.code.yourpresenter.entity.Presentation]; SQL [insert into Presentation (PRESENTATION_ID, bgImage_id, media_id, name, song_id) values (default, ?, ?, ?, ?)]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not insert: [com.google.code.yourpresenter.entity.Presentation]
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:111)
    at org.richfaces.event.MethodExpressionDropListener.processDrop(MethodExpressionDropListener.java:45)
    at org.richfaces.event.DropEvent.processListener(DropEvent.java:69)
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769)
    at org.richfaces.component.AbstractDropTarget.broadcast(AbstractDropTarget.java:123)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1221)
    at com.google.code.yourpresenter.filter.ScheduleSelectedFilter.doFilter(ScheduleSelectedFilter.java:47)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
    at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
    at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: org.springframework.dao.DataIntegrityViolationException: could not insert: [com.google.code.yourpresenter.entity.Presentation]; SQL [insert into Presentation (PRESENTATION_ID, bgImage_id, media_id, name, song_id) values (default, ?, ?, ?, ?)]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not insert: [com.google.code.yourpresenter.entity.Presentation]
    at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:641)
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:104)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:403)
    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:58)
    at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:163)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)
    at com.google.code.yourpresenter.service.ScheduleServiceImpl$$EnhancerByCGLIB$$9dfe2fc9.addPresentation(<generated>)
    at com.google.code.yourpresenter.view.ScheduleView.dropped(ScheduleView.java:154)
    at com.google.code.yourpresenter.view.ScheduleView.dropped(ScheduleView.java:92)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:187)
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    ... 35 more
Caused by: org.hibernate.exception.ConstraintViolationException: could not insert: [com.google.code.yourpresenter.entity.Presentation]
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2345)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2852)
    at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
    at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
    at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:320)
    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203)
    at 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)
    at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:877)
    at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:859)
    at org.hibernate.engine.CascadingAction$6.cascade(CascadingAction.java:279)
    at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)
    at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)
    at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)
    at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:425)
    at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:362)
    at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:338)
    at 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)
    at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:255)
    at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:84)
    at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:867)
    at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:851)
    at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:855)
    at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:686)
    at sun.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240)
    at $Proxy34.merge(Unknown Source)
    at com.google.code.yourpresenter.service.ScheduleServiceImpl.persist(ScheduleServiceImpl.java:71)
    at com.google.code.yourpresenter.service.ScheduleServiceImpl.addPresentation(ScheduleServiceImpl.java:122)
    at com.google.code.yourpresenter.service.ScheduleServiceImpl$$FastClassByCGLIB$$52d414d3.invoke(<generated>)
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
    at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:689)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:155)
    ... 49 more
Caused by: java.sql.SQLIntegrityConstraintViolationException: integrity constraint violation: NOT NULL check constraint; SYS_CT_10066 table: PRESENTATION column: SCHEDULE_NAME
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source)
    at org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(Unknown Source)
    at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94)
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)
    ... 92 more
Caused by: org.hsqldb.HsqlException: integrity constraint violation: NOT NULL check constraint; SYS_CT_10066 table: PRESENTATION column: SCHEDULE_NAME
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.Table.enforceRowConstraints(Unknown Source)
    at org.hsqldb.Table.insertSingleRow(Unknown Source)
    at org.hsqldb.StatementDML.insertRowSet(Unknown Source)
    at org.hsqldb.StatementInsert.getResult(Unknown Source)
    at org.hsqldb.StatementDMQL.execute(Unknown Source)
    at org.hsqldb.Session.executeCompiledStatement(Unknown Source)
    at org.hsqldb.Session.execute(Unknown Source)
    ... 96 more

Remove @NotNull. 删除@NotNull。 Not key field don't allowed null values. 非关键字段不允许使用空值。 Consider an input data. 考虑输入数据。

Why have you specified updatable = false, insertable = false in the Presentation to Schedule mapping? 为什么在Presentation to Schedule映射中指定了updatable = false, insertable = false

Of course this value needs to be insertable and updatable to maintain the relationship. 当然,此值需要是可插入和可更新的,以保持关系。 Try removing this and you should see the SQL change when you attempt the insert. 尝试删除它,尝试插入时应该会看到SQL更改。

For your persist strategy, hibernate will insert record to 'Presentation' table first and then update its 'schedule_id', but you set the schedule_id not null,so the insert will fail. 对于您的持久策略,休眠将首先在“ Presentation”表中插入记录,然后更新其“ schedule_id”,但是您将schedule_id设置为非null,因此插入将失败。

One solution is remove the 'not null' constraint。 一种解决方案是删除“非空”约束。

The second solution is redesign the relationship configuration,let hibernate only execute one insert sentence(include the 'schedule_id'), don't need the updating 第二种解决方案是重新设计关系配置,让休眠状态仅执行一个插入语句(包括“ schedule_id”),不需要更新

In your Presentation entity, change getSchedule()'s attributes insertable and updateble to true . 在您的Presentation实体中,将getSchedule()的属性insertable和updateble更改为true See below; 见下文;

   @ManyToOne(optional = false)
   @JoinColumn(name="SCHEDULE_NAME", nullable =false, updatable = true, insertable = true)
   public Schedule getSchedule() {
      return schedule;
   }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM