概述
新增操作:
双向关系需要双方都维护一次关系。
更新操作:只需要更新需要的内容,关系已经维护的不需要维护。不然关系比较复杂的容易报错(堆栈溢出)
更新时候不能直接保存页面的数据dto,应该通过查询或者级联获取到数据库中的持久化状态数据才可以更新。
可以使用org.springframework.beans.BeanUtils.copyProperties(dto,实体,"id","enterpriseBase")//可以添加忽略的属性
删除:
首先如果是一的一方放弃维护关联关系(不会更新外键),由多方维护关系。
情况一 没有设置orphanRemoval = true
1 获取一方数据,然后get出多的一方数据,需要删除其中一条, 操作一方保存:正确保存是
User user=userRepository.findById(25L).get();
ContactInfo contactInfo = user.getContactInfos().get(0);
//如果只是remove没有显示调用delete则不会删除
user.getContactInfos().remove(contactInfo);
contactInfoRepository.delete(contactInfo);
ContactInfo contactInfo = new ContactInfo();
contactInfo.setAddress("桂平路479号");
contactInfo.setPhoneNumber("49");
contactInfo.setUser(user);
user.getContactInfos().add(contactInfo);
userRepository.save(user);
2 获取一方数据,然后查询出多方中的一条数据,删除这条多方数据,操作一方保存
由于不是通过user查询的contactInfo数据,可以调用显示的delete直接删除,
如果是通过user查询(user的getContactInfos())就需要断开关联关系remove或者clear
ContactInfo contactInfo1 = contactInfoRepository.findById(39L).get();
if(contactInfo1 != null) {
System.out.println("数据库中删除数据");
//从数据库中获取的,不是user.getContactInfos()中获取额可以直接删除
contactInfoRepository.delete(contactInfo1);
}
ContactInfo contactInfo = new ContactInfo();
contactInfo.setAddress("桂平路479号");
contactInfo.setPhoneNumber("49");
contactInfo.setUser(user);
user.getContactInfos().add(contactInfo);
userRepository.save(user);
情况二 有设置orphanRemoval = true
删除操作可以直接调用remove就可以删除
User user=userRepository.findById(25L).get();
ContactInfo contactInfo1 = contactInfoRepository.findById(39L).get();
if(contactInfo1 != null) {
System.out.println("数据库中删除数据");
//调用remove就直接删除了数据:触发级联删除
user.getContactInfos().remove(contactInfo1);
//从数据库中获取的,不是user.getContactInfos()中获取额可以直接删除
}
ContactInfo contactInfo = new ContactInfo();
contactInfo.setAddress("桂平路479号");
contactInfo.setPhoneNumber("49");
contactInfo.setUser(user);
user.getContactInfos().add(contactInfo);
userRepository.save(user);
最后
以上就是痴情毛豆为你收集整理的JPA:新增更新删除操作的全部内容,希望文章能够帮你解决JPA:新增更新删除操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复