博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JPA ArrayList OneToMany UnsupportedOperationException 异常
阅读量:5893 次
发布时间:2019-06-19

本文共 1346 字,大约阅读时间需要 4 分钟。

在使用JPAOneToMany注解,并使用List声明类型,在更新的操作时,会遇到UnsupportedOperationException异常。

示例

比如有以下Teacher,对应多个班级

public class Teacher {    @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})    private List
klassList = new ArrayList<>();}

然后我们执行如下代码,则会产生UnsupportedOperationException异常.

Teacher teacher = teacherRepository.findOne(id);teacherRepository.save(teacher);

原因

1.findByOne返回的实体中, klassList的类型是PersistentBag,而非ArrayList

clipboard.png

public class PersistentBag extends AbstractPersistentCollection implements List {

2.@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})注解,使得jpa需要对klassList进行以下操作:

at java.util.AbstractList.clear(AbstractList.java:234)

java.util.AbstractList.clear中,并没有具体实现,直接跑出了UnsupportedOperationException

* @throws UnsupportedOperationException if the {@code remove}     *         operation is not supported by this list iterator     * @throws IllegalStateException if neither {@code next} nor     *         {@code previous} have been called, or {@code remove} or     *         {@code add} have been called after the last call to     *         {@code next} or {@code previous}     */    void remove();

解决方案

在保存前,强制转换为ArrayList

Teacher teacher = teacherRepository.findOne(id);teacher.setKlassList(new ArrayList(teacher.getKlassList()));teacherRepository.save(teacher);

转载地址:http://wtisx.baihongyu.com/

你可能感兴趣的文章
操作系统实验报告
查看>>
上传图片
查看>>
Codevs2018 反病毒软件
查看>>
nginx启动脚本
查看>>
三级菜单
查看>>
异常:java.io.IOException: Too many open files:
查看>>
POJ 1611 The Suspects (并查集求数量)
查看>>
转://如何创建ASM磁盘
查看>>
转://Oracle 11gR2 ASM磁盘组管理
查看>>
【转】jquery两稳定版本比较~~
查看>>
[转载] 全本张广泰——第十三回 广泰认义父 善心救江玉
查看>>
《团队-团队编程项目作业名称-成员简介及分工》
查看>>
Java知识体系纲要
查看>>
Google Play支付校验
查看>>
设计模式4-工厂方法模式
查看>>
python爬虫-execjs使用
查看>>
Vue1.0基础学习笔记整理
查看>>
设置Nodejs NPM全局路径
查看>>
内存泄漏
查看>>
Ubuntu Server中的root用户
查看>>