java - 休眠添加新元素@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。我试图在堆栈上找到某事,但没有任何帮助。
解决方案
这是因为您必须在loan
实体的情况下设置“密钥持有人”的关系。所以
users user = (users) session.load(users.class, userID);
loans loan = new loans();
..... setup
loan.setUser(user)
session.saveOrUpdate(user);
而且您确实意识到,如果用户将获得新贷款,您会通过设置全新的user.loans
设置有效地删除该用户的其他贷款(在当前会话中)?:) 我希望银行系统能像这样工作:)
推荐阅读
- ethereum - 使用 web3 py 库出现“缺少 trie 节点”错误
- html - 为 squarespace 封面创建动画背景
- vue.js - vue3 by vite 热替换在宅基地不起作用
- processing - 如何在我的光线投射器中修复扭曲的墙壁?(我尝试过使用余弦校正)
- swift - 如何从一个部分删除一行并同时将其添加到另一个部分?
- javascript - Tampermonkey上是否可以通过JavaScript获取百度OCR访问令牌?
- java - 如何更改 dconf 目录?
- azure-devops - ADO gulp 任务 - 将前一个任务的输出变量作为参数传递
- angular - 如何从角度的rest api响应中提取子对象
- python - python 中的数据扩充错误:TypeError: pic 应该是 PIL Image 或 ndarray。得到