Java JPA-继承具有相同字段名的类会导致保存中出现异常
我们有一个基类-base,有3个继承类-ChildA、ChildB、ChildC。 所有类都是jpa实体,使用一个判别列 ChildA和ChildB都有同名字段,而ChildC没有:Java JPA-继承具有相同字段名的类会导致保存中出现异常,java,mysql,spring,jpa,spring-data-jpa,Java,Mysql,Spring,Jpa,Spring Data Jpa,我们有一个基类-base,有3个继承类-ChildA、ChildB、ChildC。 所有类都是jpa实体,使用一个判别列 ChildA和ChildB都有同名字段,而ChildC没有: 私人Long longField(可为空) 因此,当我们尝试将ChildA实例保存到DB时: this.childARepository.save(新建ChildA(…) 我们得到以下例外情况: Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorE
私人Long longField代码>(可为空)
因此,当我们尝试将ChildA实例保存到DB时:
this.childARepository.save(新建ChildA(…)代码>
我们得到以下例外情况:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'longField' in 'field list'
我们可以想出几个变通办法,但在这种情况下,没有一个是非常好的:
1) 将longField
放在Base中-没有意义,因为ChildC不需要它
2) 为ChildA和ChildB创建另一个基类-从抽象的角度看没有意义
3) 在ChildA&ChildB中使用不同的名称-尝试过之后,效果很好,但我们不希望这样做,因为它具有相同的含义
这个问题还有别的解决办法吗?也许我们错过了什么?
谢谢 这里有这么多未回答的问题。。。1) 您对继承层次结构使用哪种映射?每班一张桌子?鉴别器列?2) 我知道你不想,但你试过一些变通方法吗?在ChildB中为字段指定一个不同的名称,然后看看会发生什么?换句话说,你确定这是因为A和B有一个同名的字段吗?请参见我的编辑,但是:1)区分栏2)是的,我尝试更改了名称,解决了您没有显示继承设置的问题。为什么用于A的表格没有“longfield”?如果有,那么问题在于您的映射以及如何设置继承-显示映射以及它如何指定与ChildATwo建议相关的表;选择一个:1)将longField
映射到数据库中的不同列。请注意,这并不意味着您必须更改Java类中字段的名称。如果两个类中的longField
不是完全相同的东西,那么这就更有意义了。2) 如果两个类中的longField
完全相同,则创建一个Base2
类,该类继承自Base1
,其中包含longField
。然后ChildA
和ChildB
继承自Base2
,而ChildC
继承自原始Base
。