广西住建局官方网站,博爱seo排名优化培训,选择一个产品做营销方案,网站建设开发服务费税率遇到了Embeddable and ElementCollection 嵌套导致SpringBoot程序无法启动的问题。现象和StackOverflow上的这个问题一模一样#xff1a;java - Embeddable and ElementCollection nesting - Stack Overflow。理解了下报错原因#xff0c;特在此写篇文章记录一下。 具体报错信… 遇到了Embeddable and ElementCollection 嵌套导致SpringBoot程序无法启动的问题。现象和StackOverflow上的这个问题一模一样java - Embeddable and ElementCollection nesting - Stack Overflow。理解了下报错原因特在此写篇文章记录一下。 具体报错信息如下org.hibernate.AnnotationException: OneToMany, ManyToMany or ElementCollection cannot be used inside an Embeddable that is also contained within an ElementCollection: com.***.collectionelement.myValues 代码示例如下 Entity
public class Tournament {IdLong id;ElementCollectionCollectionTableprivate ListEdition;
}Embeddable
public class Edition {ElementCollectionCollectionTableprivate ListRound
}Embeddable
public class Round {blabla;
} Embeddable 注解的作用 Embeddable是JPA中的一个注解表示当前类是嵌套类嵌套类的意思就是该类可以作为另一个实体类的组成部分进行嵌入JPA框架会将嵌入类的属性映射到同一张数据库表中的字段上。嵌入式类应该被视为一个值对象而不是一个独立的实体。 当你不想额外创建表(实体)但是又需要定义一些小对象以便使类看起来或者表示起来更加容易理解的时候使用 Embeddable 注解是个很不错的选择。 ElementCollection 注解的作用 ElementCollection注解是Hibernate框架中的一个注解用于表示实体类中的一个集合属性表示的是实体类中一对多或多对多的关系。它的作用是将集合中的元素映射为一个独立的表与实体类的主表进行关联。 为什么会报错 上面说到了 ElementCollection 会创建独立的表与实体类的主表进行关联注意是它表示的是实体类中一对多或者多对多的关系。而 Embeddable 注解的类是值对象不是实体它不存在独立的表。 所以在在 Embeddable嵌入式类 中使用 ElementCollection 注解会引起映射的冲突因为它会尝试在嵌入式类对应的表中创建一个与集合相关的表但实际上嵌入式类并不会有自己的表。 有两个修正办法第一个是将 Embeddable嵌入式类 改为实体。但是个人嫌太麻烦了而且不想搞一张新表所以个人使用的是另外一种偷懒的办法将ElementCollection修饰的属性由 List 改为了 JsonString规避掉了这个问题 参考 java - Embeddable and ElementCollection nesting - Stack Overflow JPA 内嵌对象 Hibernate框架学习之注解映射实体类-腾讯云开发者社区-腾讯云