Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Java БД Создание и открытие сессии в Hibernate http://www.cyberforum.ru/java-database/thread2359717.html
Здравствуйте! В проект Maven подключил зависимости Hibernate, добавил поддержку Hibernate в проект. В автоматическом режиме сформировался файл Hibernate.cfg.hml, класс Main сформировался тоже...
Формирование сущностей в Hibernate Java БД
Здравствуйте! Подскажите пожалуйста, что он от меня хочет (см. картинку)?
Java БД Вывод данных связанной таблицы в JTable
Всем привет! У меня есть таблица Продукты, в ней есть поле Ед. измерения которая является внешним ключом. так вот при выводе всех данных из таблицы Продукты в поле Ед. Измерения выводятся id. Кто...
Java БД Зависимости Hibernate для проекта Maven Здравствуйте! Может кто-нибудь дать скрипт для подтягивания зависимостей (Hibernate и SQL-connector) в проекте Maven? Нашёл в интернете следующий скрипт и пытаюсь его использовать: ... http://www.cyberforum.ru/java-database/thread2358315.html
Java БД Как работать с большой базой данных? http://www.cyberforum.ru/java-database/thread2356937.html
Добрый день. Бэк java+spring. БД hbase через apache phoenix. В базе 10млн записей. С фронта приходит 10.000 идентификаторов записей (только для примера, по факту может быть 100.000 или больше)....
Java БД Не понимаю как построить запрос
Доброго времени суток. Проблема такова, имеются две таблицы (работники, журнал посещений). Журнал имеет поля: id_worker, date, status. Таблица работники имеет поля: id, name. В журнал каждый день...
Java БД Hibernate подключение к базе
Не создается таблица в бд. Что-то в настройках хибернейта? Что делаю не так? Прикрепляю содержание файлов. При компиляции выдает вот это ноя 20, 2018 12:21:47 PM org.hibernate.Version...
Java БД Запрос на вывод из двух таблиц Всем привет, народ подскажите пожалуйста, есть две таблицы клиенты и покупки. Как можно сделать вывод, чтобы у каждого клиента увидеть список(List) сумм понедельно? пример таблиц с полями:... http://www.cyberforum.ru/java-database/thread2353187.html
Java БД Caused by: java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_password' http://www.cyberforum.ru/java-database/thread2352010.html
Пожалуйста помогите как можно решить эту проблему. у меня проект на спринг бут. загружен драйвер для mysql сам сервер новый только скачал запущен работает есть база данных market @Bean ...
Java БД Как реализовать базу в SpringBoot с использованием библиотеки Hibernate Добрый день, Сразу остановлюсь, что в базах и в java я новичек, и только начинаю разбираться. Задание: Реализовать данную базу в Java Framework 'SpringBoot' c использованием библиотеки 'Hibernate',... http://www.cyberforum.ru/java-database/thread2351634.html
SoulDrake
0 / 0 / 0
Регистрация: 06.07.2018
Сообщений: 17
0

Операция редактирования в CRUD

29.11.2018, 16:32. Просмотров 1109. Ответов 5
Метки (Все метки)

Здравствуйте

Не так давно начал знакомиться с Maven, Spring, Hibernate и т.д. Ну и в качестве небольшой практики решил попробовать сделать CRUD приложение с использованием Spring MVC, MySQL, Hibernate.

У меня получается сделать вывод таблички на странице, добавлять записи, удалять, с этим все хорошо. Но у меня все никак не получается сделать редактирование записи.

Суть такая, есть таблица в базе данных с записями, я пытаюсь по id записи получать ее страницу редактирования, передать туда конкретную запись, соответствующую этому id и изменить ее значения. Но оно почему-то пытается изменять запись с id = 0 (которой естественно нет) и вылетает исключение. И я никак не могу понять, в чем я туплю и как это исправить.

Помогите пожалуйста.

Вот код (это укороченный тестовый вариант приложения, тут только вывод списка и редактирование):

Класс-сущность:
Java
1
2
3
4
5
6
7
8
9
10
@Entity
@Table(name = "test")
public class TestEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;
 
    // getters and setters
}
Репозиторий:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Repository
public class TestRepositoryIm implements TestRepository {
    @Autowired
    private SessionFactory sessionFactory;
 
    @Override
    public List<TestEntity> list() {
        return sessionFactory.getCurrentSession().createQuery("from TestEntity").list();
    }
 
    @Override
    public void edit(TestEntity testEntity) {
        sessionFactory.getCurrentSession().update(testEntity);
    }
 
    @Override
    public TestEntity get(int id) {
        return sessionFactory.getCurrentSession().get(TestEntity.class, id);
    }
}
Сервис:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Service
public class TestServiceIm implements TestService{
    @Autowired
    private TestRepository testRepository;
    @Override
    @Transactional
    public List<TestEntity> list() {
        return testRepository.list();
    }
 
    @Override
    @Transactional
    public void edit(TestEntity testEntity) {
        testRepository.edit(testEntity);
    }
 
    @Override
    @Transactional
    public TestEntity get(int id) {
        return testRepository.get(id);
    }
}
Контроллер:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Controller
public class TestController {
    @Autowired
    private TestService service;
 
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String list(ModelMap modelMap) {
        List<TestEntity> entities = service.list();
        modelMap.addAttribute("entities", entities);
        return "entities";
    }
 
    @RequestMapping(value = "/edit/{id}", method = RequestMethod.GET)
    public String edition(@PathVariable("id") int id, ModelMap model){
        model.addAttribute("entity", service.get(id));
        return "edition";
    }
 
    @RequestMapping(value = "/edit", method = RequestMethod.POST)
    public String edit(@ModelAttribute("entity") TestEntity testEntity){
        service.edit(testEntity);
        return "redirect:/";
    }
}
Главная страница (entities.jsp):
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<table>
    <tr>
        <th>id</th>
        <th>name</th>
    </tr>
    <c:forEach var="entity" items="${entities}">
        <tr>
            <td>${entity.id}</td>
            <td>${entity.name}</td>
            <td><a href="/edit/${entity.id}">edit</a></td>
        </tr>
    </c:forEach>
</table>
</body>
</html>
Страница редактирования (edition.jsp):
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
 
<html>
<head>
    <title>Edit</title>
</head>
<body>
<c:url value="/edit" var="edit"/>
<form:form action="${edit}" method="POST" modelAttribute="entity">
    <label for="name">NAME</label>
    <input type="text" name="name" id="name">
    <input type="submit" value="Edit">
</form:form>
</body>
</html>
Так они выглядят:
Операция редактирования в CRUD


Ну и при нажатии на кнопку вылетает исключение:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
HTTP Status 500 – Internal Server Error
Type Exception Report
 
Message Request processing failed; nested exception is org.springframework.orm.hibernate5.HibernateOptimisticLockingFailureException: Object of class [test1.entity.TestEntity] with identifier [0]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [test1.entity.TestEntity#0]
 
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
 
Exception
 
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.orm.hibernate5.HibernateOptimisticLockingFailureException: Object of class [test1.entity.TestEntity] with identifier [0]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [test1.entity.TestEntity#0]
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:901)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:875)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause
 
org.springframework.orm.hibernate5.HibernateOptimisticLockingFailureException: Object of class [test1.entity.TestEntity] with identifier [0]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [test1.entity.TestEntity#0]
    org.springframework.orm.hibernate5.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:286)
    org.springframework.orm.hibernate5.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:798)
    org.springframework.orm.hibernate5.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:634)
    org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:746)
    org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:714)
    org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:533)
    org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:304)
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
    com.sun.proxy.$Proxy39.edit(Unknown Source)
    test1.controller.TestController.edit(TestController.java:36)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:498)
    org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:207)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:998)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:901)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:875)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause
 
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [test1.entity.TestEntity#0]
    org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:2522)
    org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3355)
    org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:3229)
    org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3630)
    org.hibernate.action.internal.EntityUpdateAction.execute(EntityUpdateAction.java:146)
    org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:604)
    org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:478)
    org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:356)
    org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39)
    org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1454)
    org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:511)
    org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:3283)
    org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2479)
    org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:473)
    org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:178)
    org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$300(JdbcResourceLocalTransactionCoordinatorImpl.java:39)
    org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:271)
    org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:98)
    org.springframework.orm.hibernate5.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:622)
    org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:746)
    org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:714)
    org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:533)
    org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:304)
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
    com.sun.proxy.$Proxy39.edit(Unknown Source)
    test1.controller.TestController.edit(TestController.java:36)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:498)
    org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:207)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:998)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:901)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:875)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)


Вернуться к обсуждению:
Операция редактирования в CRUD
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2018, 16:32
Готовые ответы и решения:

Ссылки в CRUD-таблице на другие CRUD-таблицы
Здравствуйте! Прошу у вас помощи :help: У меня есть список групп: Так выглядит представление...

Добавить на форме редактирования отдельную кнопку для редактирования должностей
Народ нужна помощь кто может добавить на форме редактирования кнопку редактирования должностей...

CRUD-запросы
Всем привет! Пытаюсь потихоньку начать учить NodeJS (да и в принципе JavaScript), и вот, дошел до...

Авторизация и CRUD
Здравствуйте. Использую такую штуку для заполнения базы данных. Вопрос, можно ли к ней прикрутить...

Аватарка в CRUD
Добрый день. У меня задача реализации аватарки в CRUD. Код контроллера using System; using...

5
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.