Exception: table is not Mapped问题解决
在基于SpringData/JPA来快速开发若干功能过程中,碰到了table is not Mapped问题,经过一番辛苦的调试测试之后,才发现了一个@Entity的属性name的妙用。
操作方法
- 01
场景描述: 在开发中,做几个功能类似的模块,但代码需要独立,方便后续的独立部署。故出现了很多包路径不同,但是类的名称类似的类。在Model中定义了很多名称相同的实体类,都是以@Entity来定义的。
- 02
在项目加载过程中,出席那了以下错误信息:
- 03
在项目代码中,的确定义了2个OrderEntity的class,但是他们是处于不同的项目包中的,所以从Java类层次上说,是不会冲突的。但是日志中,明确提示了冲突,且标识为重复import,就是说OrderEntity被导入了2次。更进一步说,两个Entity,我们的编译器无法分辨谁是谁,路径区分在这里不好用了。 经过观察分析,发现在JPA中是利用@Entity来定义标识的, 故推理可知如下信息: 1. @Entity标识的实体类是JPA中进行管理和映射的Entity, 其在JPA中默认的名字为class name首字母小写。比如AccountEntity,其默认的实体名称为accountEntity. 2. 相同的类名在JPA中,默认的实体名称相同,故无法正确识别,这个就是问题的来源。 3. 问题修正 于是将相同类名的Model类中Entity进行了重新命名,即@Entity(name="entity name"), 确保Entity中的名称不同即可。
赞 (0)