我正在使用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,它们不在此处工作,因为我希望孩子可以具有父级的属性。父母会拥有自己的。每班的桌子对我来说是最好的选择。 我想知道是否有其他方法可以解决此问题?
答案 0 :(得分:0)
您的Child1
和Child2
类都定义了一个名称为test
的实体属性,该实体属性被映射到具有相同名称的数据库列。当您从多态查询中的两个表中进行选择时,Hibernate无法处理。您需要更改其中一张表的列名,以免它们在UNION中发生冲突。