java - Spring JPA - 更新一个表正在更新后端中的另一个表
问题描述
我在我的项目中使用 Spring JPA 并尝试更新一个表,但它试图在更新我的实际表之前更新另一个 tbale。这是我的代码:我的服务类:
@Service
public class MyServiceImpl {
@Autowired
private Table1Repository table1Repo;
@Autowired
private Table2Repo table2Repo;
private void updateDataBaseAction(){
table1Repo.save(Table1);
}
}
@Repository
public interface Table1Repository extends CrudRepository<Table1, table1Id> {
}
@Repository
public interface Table2Repo extends CrudRepository<Table2, table2Id> {
}
实体类是:
@Entity
@Table(name = "TABLE2")
@Component
public class TABLE1Base {
@Id
@Column(name = "CROS_REF_ID")
private Long CrosRefNbr;
@Column(name = "STRT_DT")
private Date strtDt;
@Column(name = "CPTR_DT")
private Date CptrDt;
@Column(name = "BAS_ST_CD")
private String basStCD;
@Column(name = "END_DT")
private Date endDt;
@Column(name = "ADD_EVNT_ID")
private Long addEvntId;
@Column(name = "LST_UPDT_EVNT_ID")
private Long lstUpdtEvntId;
@Column(name = "VOID_EVNT_ID")
private Long voidEvntId;
--few more columns as above
--setter and getter
}
@Entity
@Table(name = "TABLE1")
@Component
public class Table1 {
@EmbeddedId
private Table1Id table1Id;
@Column(name = "CROS_REF_ID")
private Long crosRefId;
@Column(name = "TYP_CD")
private String TypCd;
--few more columns with @column annotation
--setter and getters
}
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.10.RELEASE</version>
<relativePath />
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
我检查时得到的异常日志是:
org.springframework.orm.jpa.JpaSystemException: could not execute statement; nested exception is org.hibernate.exception.GenericJDBCException: could not execute statement
我可以在控制台上看到的错误日志是:
Hibernate: update TABLE2 set CPTR_DT=?, ADD_EVNT_ID=?, BAS_ST_CD=?, END_DT=?, LST_UPDT_EVNT_ID=?, SYS_CD=?, SRC_NBR=?, STRT_DT=?, VOID_EVNT_ID=? where CROS_REF_ID=?
[basics-inbound-customerstructure] [14-05-2021 09:07:47.912 ] [ERROR][http-nio-8085-exec-2] [ne.jdbc.spi.SqlExceptionHelper][ndc[]] - ORA-20001: THE NEW START DATE |01-JAN-20 NEW CAPTURE DATE |21-APR-21 NEW CROSS REF ID |167341354| NEW ADD EVENT ID |78639570006|.
ORA-06512: at "TRG_TAB2_NO_UPD", line 2
ORA-04088: error during execution of trigger 'TRG_TAB2_NO_UPD'
2021-05-14 09:07:50.290 ERROR 30164 --- [nio-8085-exec-2] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/customerstructure] threw exception [Request processing failed; nested exception is com.optum.basics.exception.DAOException: Error updating Object Type: 1] with root cause
com.optum.basics.exception.DAOException: Error updating Object Type: 1
at com.optum.basics.customerstructure.service.impl.MyServiceImpl.updateDataBaseAction(MyServiceImpl.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at com.optum.basics.customerstructure.utils.LoggingFilter.doFilterInternal(LoggingFilter.java:50)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
它显示的触发器在 table2 上,但实际上我正在尝试更新我的 table1,而 table1 没有触发器来更新 table2。
您能否分享您对我所缺少的东西的想法,并让我知道更多信息?
解决方案
通过将 @DynamicUpdate 注释添加到我的实体类来解决此问题。
推荐阅读
- audiokit - Audiokit:(V5)音序器无法在轨道的同一位置同时播放音符
- java - 保存 ImageView 背景状态
- python - 基维不工作。[CRITICAL] [Window] 找不到任何有价值的 Window 提供程序
- javascript - 如何在反应中并排放置两个输入字段
- oop - Fortran 派生类型继承
- .net - .Net 核心项目中的 CodeCoverage -MSBuild 错误
- django - 为什么在迁移以下模型时出现“引用非模型本地的字段”错误?
- node.js - RxJS 调度程序
- php - Imagick 安装成功但发生错误:未捕获错误:找不到类 'imagick'
- vba - 未调用 Outlook VBA 事件处理程序