簡體   English   中英

Hibernate:OneToMany 關系中的 PSQLException

[英]Hibernate: PSQLException in a OneToMany relationship

我有 SpringBoot 應用程序,其中有一個帶有電影院列表的 postgres 數據庫:

cinemadb=# select * from cinemas;
 id |           name            
----+---------------------------
  1 | London''s Electric Cinema
  2 | Alamo Drafthouse
  3 | Cineteca Matadero
  4 | Cine-de Chef
  5 | Castro Theatre
  6 | Cine Thisio

每個電影院都顯示一部電影或多部電影(位於另一個數據庫中)。 我創建了一個關系表:

cinemadb=# select * from cinema_movie;
 cinema_id | movie_id 
-----------+----------
         1 |        1
         1 |        5
         1 |        8
         2 |        2
         3 |        3
         3 |        9
         4 |        1
         4 |        2
         4 |        8
         4 |        9
         6 |        9
         7 |        9
         7 |        1
         8 |        1

在最后一張表中,cinema_id 是鏈接到cinemas 表中的id 的外鍵。 movie_id 只是一個 integer 代表另一個數據庫中的 id。

我的實體表示:

@Entity
@Table(name = "cinemas")
data class Cinema(
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        val id: Long = -1,
        val name: String = "",
        @OneToMany(mappedBy = "cinema", cascade = [CascadeType.ALL])
        @JsonIgnore
        val movies: Set<CinemaMovies> = HashSet()) {

    override fun toString(): String {
        return "Cinema[id=$id, name=$name]"
    }
}

@Entity
@Table(name = "cinema_movie")
data class CinemaMovies(
        @Id
        @ManyToOne
        @JoinColumn(name="cinema_id", nullable=false)
        val cinema: Cinema? = null,
        @Id
        @Column(name = "movie_id")
        val movieId: Long = -1): Serializable

當我嘗試觀看屬於單個電影院的電影時,問題就來了:

org.postgresql.util.PSQLException:發送到后端時發生 I/O 錯誤。 at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:335) ~[postgresql-42.2.5.jar:42.2.5] at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:441) ~[postgresql-42.2.5.jar:42.2.5] at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:365) ~[postgresql-42.2.5.jar:42.2.5] at org.postgresql. jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:143) ~[postgresql-42.2.5.jar:42.2.5] at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.Z93F 725A07423FE1C889F448B33D21F46Z:106) ~[postgresql-42.2.5.jar:42.2.5] at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) ~[HikariCP-3.2.0.jar:na] at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) ~[HikariCP-3.2.0.jar:na] at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:60) ~ [hibernate-core-5.3.10.Final.jar:5.3.10.Final] at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.getResultSet(AbstractLoadPlanBasedLoader.java:419) ~[hibernate-core-5.3. 10.Final.jar :5.3.10.Final] at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeQueryStatement(AbstractLoadPlanBasedLoader.java:191) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final] at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:121) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final] at org.hibernate.loader. plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:86) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final] at org.hibernate.loader.collection.plan.AbstractLoadPlanBasedCollectionInitializer.initialize (AbstractLoadPlanBasedCollectionInitializer.java:87)~[休眠 e-core-5.3.10.Final.jar:5.3.10.Final] at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:691) ~[hibernate-core-5.3.10.Final.jar :5.3.10.Final] at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:75) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final] at org.hibernate .internal.SessionImpl.initializeCollection(SessionImpl.java:2246) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final] at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java :585) ~[休眠核心- 5.3.10.Final.jar:5.3.10.Final] at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:263) ~[hibernate-core-5.3.10.Final.jar:5.3.10 .Final] at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:581) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final] at org.hibernate.collection.internal .AbstractPersistentCollection.read(AbstractPersistentCollection.java:148) ~[hibernate-core-5.3.10.Final.jar:5.3.10.Final] at org.hibernate.collection.internal.PersistentSet.toArray(PersistentSet.java:195) ~[hibernate-core-5.3.10.Final.Z68995FC BF432492D15484D04A9D2AC40Z:5.3.10.Final] at com.cinemaster.cinemamodule.controller.CinemaController.getCinemas(CinemaController.kt:27) ~[classes/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:567) ~[na:na] at org.springframework.web.method.support. InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.1.8.RELEASE.Z6 8995FCBF432492D15484D04A9D2AC40Z:5.1.8.RELEASE] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.1.8.RELEASE.jar:5.1.8.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) ~[spring-webmvc-5.1.8.RELEASE.jar:5.1.8.RELEASE] at org.springframework.web .servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892) ~[spring-webmvc-5.1.8.RELEASE.jar:5.1.8.RELEASE] at org.springframework.web.servlet.mvc. method.annotation.RequestMappingHandlerAdapter.handleIntern al(RequestMappingHandlerAdapter.java:797) ~[spring-webmvc-5.1.8.RELEASE.jar:5.1.8.RELEASE] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87 ) ~[spring-webmvc-5.1.8.RELEASE.jar:5.1.8.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039) ~[spring-webmvc-5.1.8. RELEASE.jar:5.1.8.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) ~[spring-webmvc-5.1.8.RELEASE.jar:5.1.8.RELEASE] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.Z93F72 5A07423FE1C889F448B33D21F46Z:1005) ~[spring-webmvc-5.1.8.RELEASE.jar:5.1.8.RELEASE] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897) ~[spring-webmvc-5.1 .8.RELEASE.jar:5.1.8.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) ~[tomcat-embed-core-9.0.21.jar:9.0.21] at org .springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) ~[spring-webmvc-5.1.8.RELEASE.jar:5.1.8.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet. java:741) ~[tomcat-embed-core-9.0.21.jar:9.0.21] at org.ZB6EFD606D118D0F62066E31419FF04 atalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.21.jar:9.0.21] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166 ) ~[tomcat-embed-core-9.0.21.jar:9.0.21] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0. 21.jar:9.0.21] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.21.jar:9.0.21] at org.apache. catalina.core.ApplicationFilterChain.doFilter(ApplicationFilte rChain.java:166) ~[tomcat-embed-core-9.0.21.jar:9.0.21] at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:88) ~ [spring-boot-actuator-2.1.6.RELEASE.jar:2.1.6.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:109) ~[spring-web-5.1.8. RELEASE.jar:5.1.8.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.21.jar:9.0.21] at org. apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)~[tomcat-e mbed-core-9.0.21.jar:9.0.21] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-5.1.8.RELEASE.jar:5.1.8 .RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:109) ~[spring-web-5.1.8.RELEASE.jar:5.1.8.RELEASE] at org.apache.catalina.core .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.21.jar:9.0.21] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[ tomcat-embed-core-9.0.21.jar:9.0.21] 在 org.springfram ework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) ~[spring-web-5.1.8.RELEASE.jar:5.1.8.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter .java:109) ~[spring-web-5.1.8.RELEASE.jar:5.1.8.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed- core-9.0.21.jar:9.0.21] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.21.jar:9.0.21] at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInte rnal(HiddenHttpMethodFilter.java:93) ~[spring-web-5.1.8.RELEASE.jar:5.1.8.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:109) ~[spring -web-5.1.8.RELEASE.jar:5.1.8.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.21.jar: 9.0.21] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.21.jar:9.0.21] at org.springframework.boot.actuate. metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.Z93F725A07423FE1C889F44 8B33D21F46Z:114) ~[spring-boot-actuator-2.1.6.RELEASE.jar:2.1.6.RELEASE] at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:104 ) ~[spring-boot-actuator-2.1.6.RELEASE.jar:2.1.6.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:109) ~[spring-web-5.1. 8.RELEASE.jar:5.1.8.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.21.jar:9.0.21] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)~[tomcat-emb ed-core-9.0.21.jar:9.0.21] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) ~[spring-web-5.1.8.RELEASE.jar:5.1.8 .RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:109) ~[spring-web-5.1.8.RELEASE.jar:5.1.8.RELEASE] at org.apache.catalina.core .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.21.jar:9.0.21] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[ tomcat-embed-core-9.0.21.jar:9.0.21] 在 org.ZB6EF D606D118D0F62066E31419FF04CCZ.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.21.jar:9.0.21] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java :96) ~[tomcat-embed-core-9.0.21.jar:9.0.21] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) ~[tomcat-embed-core-9.0. 21.jar:9.0.21] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) ~[tomcat-embed-core-9.0.21.jar:9.0.21] at org.apache. catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)~[tomcat-embed-cor e-9.0.21.jar:9.0.21] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.21.jar:9.0.21] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.21.jar:9.0.21] at org.apache.coyote.http11.Http11Processor.service(Http11Processor .java:408) ~[tomcat-embed-core-9.0.21.jar:9.0.21] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) ~[tomcat-embed-core-9.0. 21.jar:9.0.21] 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.Z9 3F725A07423FE1C889F448B33D21F46Z:853) ~[tomcat-embed-core-9.0.21.jar:9.0.21] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1587) ~[tomcat-embed -core-9.0.21.jar:9.0.21] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.21.jar:9.0. 21] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:第628章~[na:na]在org.apache.tomcat.util.thre ads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.21.jar:9.0.21] at java.base/java.lang.Thread.run(Thread.java:835 ) ~[na:na] 引起:javax.net.ssl.SSLException:標簽不匹配。 at java.base/sun.security.ssl.Alert.createSSLException(Alert:java:133) ~[na.na] at java.base/sun.security.ssl.TransportContext.fatal(TransportContext:java:320) ~[ na.na] at java.base/sun.security.ssl.TransportContext.fatal(TransportContext:java:263) ~[na.na] at java.base/sun.security.ssl.TransportContext.fatal(TransportContext:java: 258) ~[na.na] at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport:java:129) ~[na.na] at java.base/sun.security.ssl.SSLSocketImpl.decode( SSLS ocketImpl:java:1183) ~[na.na] at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl:java:1153) ~[na.na] at java.base/sun.security.ssl. SSLSocketImpl$AppInputStream.read(SSLSocketImpl:java:828) ~[na.na] at org.postgresql.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream:java.140) ~[postgresql-42.2.5:jar.42.2.5] at org.postgresql.core.VisibleBufferedInputStream.ensureBytes(VisibleBufferedInputStream:java.109) ~[postgresql-42.2.5:jar.42.2.5] at org.postgresql.core.VisibleBufferedInputStream.read(VisibleBufferedInputStream:Z93F725A07423FE1C889F448B3 3D21F46Z.67) ~[postgresql-42.2.5:jar.42.2.5] at org.postgresql.core.PGStream.receiveChar(PGStream:java.306) ~[postgresql-42.2.5:jar.42.2.5] at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl:java.1952) ~[postgresql-42.2.5:jar.42.2.5] at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl:java.308 ) ~[postgresql-42.2.5:jar.42.2.5]..: 84個常見幀省略造成的。 javax.crypto:AEADBadTagException。 標簽不匹配。 at java.base/com.sun.crypto.provider.GaloisCounterMode:decryptFinal(GaloisCounterMode:java.595) ~[na.na] at java.base/com.sun.crypto.provider.CipherCore:finalNoPadding(CipherCore:java. 1116) ~[na.na] at java.base/com.sun.crypto.provider.CipherCore:fillOutputBuffer(CipherCore:java.1053) ~[na.na] at java.base/com.sun.crypto.provider. CipherCore:doFinal(CipherCore:java.941) ~[na.na] at java.base/com.sun.crypto.provider.AESCipher:engineDoFinal(AESCipher:java.491) ~[na.na] at java.base/ javax.crypto.CipherSpi:bufferCrypt(CipherSpi:java.779) ~[na.na] 在 java.base/javax.crypto.CipherSpi:engineDoFinal(CipherSpi:Z9 3F725A07423FE1C889F448B33D21F46Z.730) ~[na.na] at java.base/javax.crypto.Cipher:doFinal(Cipher:java.2503) ~[na.na] at java.base/sun.security.ssl.SSLCipher$T13GcmReadCipherGenerator$ GcmReadCipher:decrypt(SSLCipher:java.1913) ~[na.na] at java.base/sun.security.ssl.SSLSocketInputRecord:decodeInputRecord(SSLSocketInputRecord:java.262) ~[na.na] at java.base/sun. security.ssl.SSLSocketInputRecord:decode(SSLSocketInputRecord:java.190) ~[na.na] at java.base/sun.security.ssl.SSLTransport:decode(SSLTransport:java.108) ~[na.na]... 93個常用框架省略

我究竟做錯了什么?

這似乎是ManyToMany關系而不是OneToMany關系。 同樣,在單個實體類中,不能使用@Id注釋兩個實例變量。 您必須使用創建ManyToMany關系。
參考示例: https : //www.baeldung.com/hibernate-many-to-many

為電影和電影創建單獨的表並使用 @JoinTable 而不是 @JoinColumn

@JoinTable(
  name = "cinema_movie",
  joinColumns = @JoinColumn(name = "cinema_id"),
  inverseJoinColumns = @JoinColumn(name = "movie_id")
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM