admin管理员组文章数量:1637183
今天开发web的时候加了一个model类,启动springboot时导致了这个错误,记录一下
由于表中有两个id,所以添加了两个@id注解,导致了这个错误
如果一个实体类对应的表拥有多个primary key
,则要求该实体类必须可序列化,该类要实现 Serializable
接口,类后添加implements Serializable
。
然后默认生成 private static final long serialVersionUID = 1L;
重新启动即可。
根本原因是网络传输中,要求序列化的类必须有一个唯一的标识,该表示用来识别传输的对象,所以当序列化中有多个id的时候,必须加上该标识用来识别这个类的对象。
我们看serialVersionUID
从字面上来说就是序列化版本号,为什么两个@Id
就必须要实现Serializable
接口,并且必须有这个样一个final
类型的成员变量呢?
首先要明白序列化是要做什么用的:序列化就是为了传输一个Java对象用的,无论这个传输是传输到磁盘(IO)上,还是要进行网络传输。为了标识一个对象的唯一性,序列化的唯一ID就变得十分重要了。一个person
对象如果传到另一端变成了grade
对象,这种错误是不可接受的,因此我们给person
对象一个唯一的序列化ID,到另一端收到这个内容,并进行反序列化时,可以发现这个ID,就会明白是person
对象而不是grade
对象。
当只有一个@Id
的时候,Spring会根据这个id给你创建出来一个符合它认可的serialVersionUID
。当你给两个字段都标识@Id
的时候,Spring无法确定到底哪个才是应该做为serialVersionUID
的值,所以必须由我们指定一个serialVersionUID
才可以。
因此Composite-id class must implement Serializable
这个错就是要提醒我们:请给当前类指定一个序列化ID。
本文标签: HibernateMappingExceptionCausedorgcomposite
版权声明:本文标题:Caused by: org.hibernate.MappingException: Composite-id class must implement Serializable 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1729233231a1191693.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论