首页 > 解决方案 > 休眠添加新元素@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。我试图在堆栈上找到某事,但没有任何帮助。

标签: javahibernate

解决方案


这是因为您必须在loan实体的情况下设置“密钥持有人”的关系。所以

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

而且您确实意识到,如果用户将获得新贷款,您会通过设置全新的user.loans设置有效地删除该用户的其他贷款(在当前会话中)?:) 我希望银行系统能像这样工作:)


推荐阅读