Spring Boot中的PostgreSQL继承命名问题

时间:2019-11-13 17:20:31

标签: java postgresql spring-boot jpa

我正在使用PostgreSQL进行jpa,但是出现了一个看起来很奇怪的错误。 我在下面有示例ddl。子表使用两个不同的数据类型共享相同的名称,并且它们与父表一起继承。

@PersistenceContext

对于实体

EntityManagerFactory

子表

CREATE TABLE Parent
(
    id  VARCHAR(20) NOT NULL
)

CREATE TABLE child1
(
    test       double precision
)
INHERITS (Parent);


CREATE TABLE child2
(
    test       boolean
)
INHERITS (Parent);

Child2表

@Entity
@Table(
    name = "parent",
)
@NamedQuery(
    name = "parent",
    query = "SELECT p FROM Parent p"
)
@Inheritance(
    strategy = InheritanceType.TABLE_PER_CLASS
)
@Data
@NoArgsConstructor
public class Parent implements Serializable {
   @Id
   @NotNull
   @Column(name = "id")
   String id;
}

当我使用控制器在父实体上创建新记录时,它将返回类似错误

错误:UNION类型的双精度和布尔值无法匹配

我知道jpa正在使用union查找导致该错误的匹配结果。对于Joined和SingleTable,它们不在此处工作,因为我希望孩子可以具有父级的属性。父母会拥有自己的。每班的桌子对我来说是最好的选择。 我想知道是否有其他方法可以解决此问题?

1 个答案:

答案 0 :(得分:0)

您的Child1Child2类都定义了一个名称为test的实体属性,该实体属性被映射到具有相同名称的数据库列。当您从多态查询中的两个表中进行选择时,Hibernate无法处理。您需要更改其中一张表的列名,以免它们在UNION中发生冲突。