WEB后端向数据库传入数据操作报错

在尝试通过CSV文件向数据库批量插入用户信息时遇到错误:'javax.persistence.TransactionRequiredException: Executing an update/delete query'。问题源于缺少SpringBoot的@Transactional注解。解决方案是在相关操作的方法或类级别添加@Transactional注解,确保数据操作在事务中进行。
摘要由CSDN通过智能技术生成

Hibernate: select user0_.user_id as user_id1_8_, user0_.e_mail as e_mail2_8_, user0_.user_age as user_age3_8_, user0_.user_gender as user_gen4_8_, user0_.user_grade as user_gra5_8_, user0_.user_icon as user_ico6_8_, user0_.user_identity as user_ide7_8_, user0_.user_institute as user_ins8_8_, user0_.username as username9_8_ from user user0_ where user0_.user_id=?
Hibernate: delete from user where user_id=?
Hibernate: insert into user (user_id, user_icon, user_identity, username, user_age, user_gender, user_grade, user_institute, e_mail) values(?,?,?,?,?,?,?,?,?)
Hibernate: select userauthor0_.user_id as user_id1_9_, userauthor0_.user_identity as user_ide2_9_, userauthor0_.user_password as user_pas3_9_, userauthor0_.username as username4_9_ from user_authority userauthor0_ where userauthor0_.user_id=?
2021-06-02 13:06:44.129 ERROR 7156 — [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query] with root cause

javax.persistence.TransactionRequiredException: Executing an update/delete query
at org.hibernate.internal.AbstractSharedSessionContract.checkTransactionNeededForUpdateOperation(AbstractSharedSessionContract.java:409) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
at org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1601) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
at org.springframework.data.jpa.repository.query.JpaQueryExecution M o d i f y i n g E x e c u t i o n . d o E x e c u t e ( J p a Q u e r y E x e c u t i o n . j a v a : 238 )   [ s p r i n g − d a t a − j p a − 2.2.0. R E L E A S E . j a r : 2.2.0. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . d a t a . j p a . r e p o s i t o r y . q u e r y . J p a Q u e r y E x e c u t i o n . e x e c u t e ( J p a Q u e r y E x e c u t i o n . j a v a : 88 )   [ s p r i n g − d a t a − j p a − 2.2.0. R E L E A S E . j a r : 2.2.0. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . d a t a . j p a . r e p o s i t o r y . q u e r y . A b s t r a c t J p a Q u e r y . d o E x e c u t e ( A b s t r a c t J p a Q u e r y . j a v a : 154 )   [ s p r i n g − d a t a − j p a − 2.2.0. R E L E A S E . j a r : 2.2.0. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . d a t a . j p a . r e p o s i t o r y . q u e r y . A b s t r a c t J p a Q u e r y . e x e c u t e ( A b s t r a c t J p a Q u e r y . j a v a : 142 )   [ s p r i n g − d a t a − j p a − 2.2.0. R E L E A S E . j a r : 2.2.0. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . d a t a . r e p o s i t o r y . c o r e . s u p p o r t . R e p o s i t o r y F a c t o r y S u p p o r t ModifyingExecution.doExecute(JpaQueryExecution.java:238) ~[spring-data-jpa-2.2.0.RELEASE.jar:2.2.0.RELEASE] at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:88) ~[spring-data-jpa-2.2.0.RELEASE.jar:2.2.0.RELEASE] at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:154) ~[spring-data-jpa-2.2.0.RELEASE.jar:2.2.0.RELEASE] at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:142) ~[spring-data-jpa-2.2.0.RELEASE.jar:2.2.0.RELEASE] at org.springframework.data.repository.core.support.RepositoryFactorySupport ModifyingExecution.doExecute(JpaQueryExecution.java:238) [springdatajpa2.2.0.RELEASE.jar:2.2.0.RELEASE]atorg.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:88) [springdatajpa2.2.0.RELEASE.jar:2.2.0.RELEASE]atorg.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:154) [springdatajpa2.2.0.RELEASE.jar:2.2.0.RELEASE]atorg.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:142) [springdatajpa2.2.0.RELEASE.jar:2.2.0.RELEASE]atorg.springframework.data.repository.core.support.RepositoryFactorySupportQueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:618) ~[spring-data-commons-2.2.0.RELEASE.jar:2.2.0.RELEASE]
at org.springframework.data.repository.core.support.RepositoryFactorySupport Q u e r y E x e c u t o r M e t h o d I n t e r c e p t o r . i n v o k e ( R e p o s i t o r y F a c t o r y S u p p o r t . j a v a : 605 )   [ s p r i n g − d a t a − c o m m o n s − 2.2.0. R E L E A S E . j a r : 2.2.0. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . R e f l e c t i v e M e t h o d I n v o c a t i o n . p r o c e e d ( R e f l e c t i v e M e t h o d I n v o c a t i o n . j a v a : 186 )   [ s p r i n g − a o p − 5.2.0. R E L E A S E . j a r : 5.2.0. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . d a t a . p r o j e c t i o n . D e f a u l t M e t h o d I n v o k i n g M e t h o d I n t e r c e p t o r . i n v o k e ( D e f a u l t M e t h o d I n v o k i n g M e t h o d I n t e r c e p t o r . j a v a : 80 )   [ s p r i n g − d a t a − c o m m o n s − 2.2.0. R E L E A S E . j a r : 2.2.0. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . R e f l e c t i v e M e t h o d I n v o c a t i o n . p r o c e e d ( R e f l e c t i v e M e t h o d I n v o c a t i o n . j a v a : 186 )   [ s p r i n g − a o p − 5.2.0. R E L E A S E . j a r : 5.2.0. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . t r a n s a c t i o n . i n t e r c e p t o r . T r a n s a c t i o n A s p e c t S u p p o r t . i n v o k e W i t h i n T r a n s a c t i o n ( T r a n s a c t i o n A s p e c t S u p p o r t . j a v a : 353 )   [ s p r i n g − t x − 5.2.0. R E L E A S E . j a r : 5.2.0. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . t r a n s a c t i o n . i n t e r c e p t o r . T r a n s a c t i o n I n t e r c e p t o r . i n v o k e ( T r a n s a c t i o n I n t e r c e p t o r . j a v a : 99 )   [ s p r i n g − t x − 5.2.0. R E L E A S E . j a r : 5.2.0. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . R e f l e c t i v e M e t h o d I n v o c a t i o n . p r o c e e d ( R e f l e c t i v e M e t h o d I n v o c a t i o n . j a v a : 186 )   [ s p r i n g − a o p − 5.2.0. R E L E A S E . j a r : 5.2.0. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . d a o . s u p p o r t . P e r s i s t e n c e E x c e p t i o n T r a n s l a t i o n I n t e r c e p t o r . i n v o k e ( P e r s i s t e n c e E x c e p t i o n T r a n s l a t i o n I n t e r c e p t o r . j a v a : 139 )   [ s p r i n g − t x − 5.2.0. R E L E A S E . j a r : 5.2.0. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . R e f l e c t i v e M e t h o d I n v o c a t i o n . p r o c e e d ( R e f l e c t i v e M e t h o d I n v o c a t i o n . j a v a : 186 )   [ s p r i n g − a o p − 5.2.0. R E L E A S E . j a r : 5.2.0. R E L E A S E ] a t o r g . s p r i n g f r a m e w o r k . d a t a . j p a . r e p o s i t o r y . s u p p o r t . C r u d M e t h o d M e t a d a t a P o s t P r o c e s s o r QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:605) ~[spring-data-commons-2.2.0.RELEASE.jar:2.2.0.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.0.RELEASE.jar:5.2.0.RELEASE] at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80) ~[spring-data-commons-2.2.0.RELEASE.jar:2.2.0.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.0.RELEASE.jar:5.2.0.RELEASE] at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:353) ~[spring-tx-5.2.0.RELEASE.jar:5.2.0.RELEASE] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:99) ~[spring-tx-5.2.0.RELEASE.jar:5.2.0.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.0.RELEASE.jar:5.2.0.RELEASE] at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139) ~[spring-tx-5.2.0.RELEASE.jar:5.2.0.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.0.RELEASE.jar:5.2.0.RELEASE] at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:605) [springdatacommons2.2.0.RELEASE.jar:2.2.0.RELEASE]atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [springaop5.2.0.RELEASE.jar:5.2.0.RELEASE]atorg.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80) [springdatacommons2.2.0.RELEASE.jar:2.2.0.RELEASE]atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [springaop5.2.0.RELEASE.jar:5.2.0.RELEASE]atorg.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:353) [springtx5.2.0.RELEASE.jar:5.2.0.RELEASE]atorg.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:99) [springtx5.2.0.RELEASE.jar:5.2.0.RELEASE]atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [springaop5.2.0.RELEASE.jar:5.2.0.RELEASE]atorg.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139) [springtx5.2.0.RELEASE.jar:5.2.0.RELEASE]atorg.sprin

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现这个功能,你需要在前端页面中创建一个表单,表单包含一个提交按钮和一个输入框,用户在输入框中输入值并点击提交按钮后,表单会将输入框中的值发送给后端后端接收到这个值后,可以使用 Django ORM 操作数据库,查询符合条件的数据并将结果返回给前端页面。 以下是具体的实现步骤: 1. 在前端页面中创建一个表单,包含一个输入框和一个提交按钮。 ```html <form action="{% url 'search' %}" method="post"> {% csrf_token %} <input type="text" name="query"> <button type="submit">搜索</button> </form> ``` 2. 在后端中编写一个视图函数,用于接收表单提交的数据,并查询符合条件的数据。 ```python from django.shortcuts import render from django.db.models import Q from .models import MyModel def search(request): if request.method == 'POST': query = request.POST.get('query', '') results = MyModel.objects.filter(Q(name__icontains=query) | Q(description__icontains=query)) return render(request, 'search_results.html', {'results': results, 'query': query}) else: return render(request, 'search_form.html') ``` 在这个视图函数中,我们首先判断请求的方法是否为 POST,如果是,我们就从表单中获取用户输入的值,并使用 Django ORM 进行查询。这里我们使用了 Q 对象来实现模糊查询,查询符合名称或描述中包含用户输入内容的数据。最后,我们将查询结果和用户输入的值传递给模板,渲染出搜索结果页面。 3. 在模板中渲染查询结果。 ```html {% if results %} <h2>"{{ query }}" 的搜索结果:</h2> <ul> {% for result in results %} <li><a href="{% url 'detail' result.id %}">{{ result.name }}</a></li> {% endfor %} </ul> {% else %} <p>没有找到符合搜索条件的结果。</p> {% endif %} ``` 在模板中,我们首先判断查询结果是否为空,如果不为空,就渲染出搜索结果列表。如果查询结果为空,就渲染出一条提示信息。在搜索结果列表中,我们将每个结果的名称作为链接,点击链接可以进入该结果的详情页。 以上就是实现将用户输入的值传递给后端并查询数据库的完整流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值