что не так, ребята, у меня отношения в спящем режиме @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. Я пытался найти что-то в стеке, но ничего не помогло.




Это потому, что вы должны установить отношение к «держателю ключа», в вашем случае это объект loan. Так
users user = (users) session.load(users.class, userID);
loans loan = new loans();
..... setup
loan.setUser(user)
session.saveOrUpdate(user);
И вы понимаете, что если пользователь возьмет новую ссуду, вы эффективно удаляете другие ссуды этого пользователя (в текущем сеансе), установив новый набор user.loans? :) Желаю, чтобы банковские системы так работали :)
Но что? Оригинальный вопрос? Как я указал выше - нагрузка. Забавный вопрос? Set<loans> loanSet = user.getLoans()
ух ты ! Я этого не осознавал. Есть ли другой способ решить эту проблему?