首页 > 解决方案 > JPA criteriaBuilder 中的列名与父类名冲突

问题描述

我有一个作为实体的类和一个从它继承的子类,但它具有与父类名称相同的字段。

例如:

@Entity
class Parent {
    String parentField;
}

@Entity
class Child extends Parent {
    String parent;
}

现在,当我需要执行如下 JPA 查询时:

Root<Child> childClassRoot = criteriaBuilder.treat(parentRoot, Child.class);
criteriaQuery.select(parentRoot).where(
    criteriaBuilder.like(childClassRoot.get("parent"), "%someText%")
)

不适合我,因为 JPA 认为 parent 不是 child.parent,而是父类。当我将父级重命名为 parentText 时,它工作正常。

因此,如果我修改子类并使用以下查询,那么它可以正常工作:

@Entity
class Child extends Parent {
    String parentText;
}

和查询:

criteriaQuery.select(parentRoot).where(
    criteriaBuilder.like(childClassRoot.get("parentText"), "%someText%")
)

这样可行,

但是有什么解决方案我不需要重命名列名?我的意思是我可以重命名该列来解决这个问题,但还有其他选择吗?

标签: javajpa

解决方案


除了重命名之外,没有其他解决方案。


推荐阅读