Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
3 / 3 / 0
Регистрация: 22.10.2021
Сообщений: 217

Hibernate ведет себя не ожиданно

15.08.2022, 22:01. Показов 753. Ответов 2

Студворк — интернет-сервис помощи студентам
Есть сущность Order (заказ) которая ссылается на сущность OrderDetail(OneToOne) и User(ManyToOne)

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@DynamicUpdate
@Table(name = "orders")
public class Order {
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long orderid;
 
    @ManyToOne (fetch = FetchType.LAZY)
    @JoinColumn(name = "chatid")
    private User user;
 
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "detailid")
    private OrderDetail orderdetail;
}


OrderDetail ссылается на Product(OneToOne) и Order(OneToOne)

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@DynamicUpdate
@Table(name = "orderdetails")
public class OrderDetail {
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long detailid;
 
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "orderid")
    private Order order;
 
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "prodid")
    private Product prod;
}


И есть Product, который ссылается только на User(ManyToOne)

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@DynamicUpdate
@Table(name = "products")
public class Product {
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long prodid;
 
    @Column(name= "prodstatus", length = 16, columnDefinition = "varchar(16) default 'ДОСТУПЕН'")
    @Enumerated(EnumType.STRING)
    private ProdStatus prodstatus = ProdStatus.ДОСТУПЕН;
 
    @ManyToOne (fetch = FetchType.LAZY)
    @JoinColumn(name = "chatid")
    private User user;
}


Притом при всем, User который в Order - это юзер который купил этот заказ, заказчик тоесть, а User который в Product это юзер загрузивший продукт... типо поставщик... короче разные юзеры!



Как только я получаю ивент я создаю ордер:
Order order = new Order();
Делаю нужные set и сохраняю
orderService.saveOrder(order);

помимо этого у меня есть кэш, куда я помещаю этот объект ордера:
Java
1
2
private final Map<Long,Order> userOrderMap = new HashMap<>();
userOrderMap.put(chatid,order);
а потом получаю его вот так:
Java
1
2
3
4
5
6
7
    public Order getProcessedOrder(Long chatid){
        if (userOrderMap.get(chatid) == null){
            orderService.findСurrentOrderForUser(chatid);
            userOrderMap.put(chatid,orderService.findСurrentOrderForUser(chatid));
        }
        return  userOrderMap.get(chatid);
    }

и после этого начинаются странные вещи, я понимаю что связанно это с Hibernate и его настройками толи прокси толи кэша, но получается так,
что в какой то момент времени (когда я хочу закрыть заказ) я могу получить продукт из БД изменить ему статус и сохранить результат:
Java
1
2
3
4
5
Optional<Product> prod = prodService.getProdById(processedOrder.getOrderdetail().getProduct().getProdid());
        if(prod.isPresent()){
            prod.get().setProdstatus(ProdStatus.ДОСТУПЕН);
            prodService.save(drop.get());
        }
а в какой то момент времени (когда хочу сохранить заказ в бд), выполняя этот же код я не могу получить продукт, мне приходит null!!!!
и изменить статус для Product я могу только лишь получив обьект класса Order:
Java
1
2
3
Order processedOrder = getProcessedOrder(chatid);
processedOrder.getOrderdetail().getProduct().setProdstatus(ProdStatus.КУПЛЕН);
orderService.saveOrder(processedOrder);
очень прошу поддержки и помощи что делать и как быть? хочу чтобы каждый метод вызывал мой продукт именно из БД а не фиг пойми откуда!
Ошибки в ходе эксперимента вываливались разные, была ошибка какого то кольцевого вызова для юзер и продукт, но я уже не могу воспроизвести ее, оставлю код пока так чтобы работал)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.08.2022, 22:01
Ответы с готовыми решениями:

Scala странно себя ведёт
Захотелось написать функцию, которая возвращает false если число чётное: scala&gt; def isPrime(n:BigInt) = { | if (n%2==0) false ...

Массив странно себя ведет
Здравствуйте! Проблема такая: заполняю массив объектов класса случайными числами, если в цикле заполнения сразу выводить значения, то...

Почему график ведет себя странно
График отрисовывается на ура, пока икс не возвожу в квадрат. Подскажите пожалуйста, как исправить проблему private double myFunc(double...

2
3 / 3 / 0
Регистрация: 22.10.2021
Сообщений: 217
19.08.2022, 23:19  [ТС]
очень актуально
может ли хоть кто то, предположить хоть что то?
0
49 / 39 / 11
Регистрация: 24.07.2022
Сообщений: 117
20.08.2022, 01:19
Цитата Сообщение от UnrealCoder Посмотреть сообщение
может ли хоть кто то, предположить хоть что то?
Сделай мини-проект для IDEA, так больше шансов, что кто-то посмотрит
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.08.2022, 01:19
Помогаю со студенческими работами здесь

Странно ведет себя
Здравствуйте,помогите пожалуйста,первый раз в жизни делаю верстку,через два дня сдавать,проблема походу в слоях. Сильно не пинайте и...

While ведет себя некорректно
0: if a&lt;&gt;b then begin if a&gt;b then a:=a-b else b:=b-a; goto 0; end; ставлю перед begin label 0; while a&lt;&gt;b do; begin ...

МП странно себя ведет
господа нужна ваша помощь купил материнку AsRock g31m-s шла вместе с селероном е1400 с ним работает но как только ставлю корку...

Проблема wi fi ведёт себя странно
На телефоне вайфай работает медленно ( грузит 100 мб по часу )но когда включаешь вайфай на старом планшете то на телефоне скорость...

Дисплей ведет себя не адекватно
Решил сегодня изучить работу МК с клавиатурой и дисплеем. Скачал готовый проект с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru