多语言展示
当前在线:1565今日阅读:60今日分享:41

Exception: table is not Mapped问题解决

在基于SpringData/JPA来快速开发若干功能过程中,碰到了table is not Mapped问题,经过一番辛苦的调试测试之后,才发现了一个@Entity的属性name的妙用。
工具/原料
1

hibernate

2

java

3

spring

方法/步骤
1

场景描述: 在开发中,做几个功能类似的模块,但代码需要独立,方便后续的独立部署。故出现了很多包路径不同,但是类的名称类似的类。在Model中定义了很多名称相同的实体类,都是以@Entity来定义的。

2

在项目加载过程中,出席那了以下错误信息:

3

在项目代码中,的确定义了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中的名称不同即可。

推荐信息