Hibernate добавляет новый элемент @oneToMany

что не так, ребята, у меня отношения в спящем режиме @oneToMany:

Это в классе ссуды:

@ManyToOne(cascade=CascadeType.ALL) private users user;

Это в классе пользователя:
@OneToMany(mappedBy = "user",fetch=FetchType.LAZY) private Set<loans> loans=new HashSet<loans>(0);

здесь у меня есть способ вставить новую ссуду:

public static void addLoanToUser(Integer userID,String brand,String model,String registration,String loanStart , String loanEnd){
 Session session = HibernateUtil.getSessionFactory().openSession();
      Transaction transaction = null;
    try {   

        transaction = session.beginTransaction();
                    users user = (users) session.load(users.class, userID);
                    Set<loans> loanSet = new HashSet();

                    loans loan = new loans();                        
                    loan.setBrand(brand);
                    loan.setModel(model);
                    loan.setRegistration(registration);
                    loan.setLoanStart(loanStart);
                    loan.setLoanEnd(loanEnd);
                    loan.setPaydone("no");
                    loanSet.add(loan);
                    user.setLoans(loanSet);

                    session.saveOrUpdate(user);
                    session.save(loan);

        session.getTransaction().commit();

    } catch (HibernateException e) {
        transaction.rollback();
        e.printStackTrace();
    } finally {
        session.close();
    }

 }

Когда я вставляю данные в базу данных, внешний ключ всегда имеет значение NULL. Я пытался найти что-то в стеке, но ничего не помогло.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
50
1

Ответы 1

Это потому, что вы должны установить отношение к «держателю ключа», в вашем случае это объект loan. Так

users user = (users) session.load(users.class, userID);
loans loan = new loans();  
..... setup
loan.setUser(user)
session.saveOrUpdate(user);

И вы понимаете, что если пользователь возьмет новую ссуду, вы эффективно удаляете другие ссуды этого пользователя (в текущем сеансе), установив новый набор user.loans? :) Желаю, чтобы банковские системы так работали :)

ух ты ! Я этого не осознавал. Есть ли другой способ решить эту проблему?

blaise 22.05.2018 20:26

Но что? Оригинальный вопрос? Как я указал выше - нагрузка. Забавный вопрос? Set<loans> loanSet = user.getLoans()

Antoniossss 22.05.2018 21:29

Другие вопросы по теме