列名称与JPA条件构建器中的父类名称冲突

时间:2019-01-07 07:24:36

标签: java jpa

我有一个类,是一个实体,并从其继承了一个子类,但是它的字段与父类名称相同。

例如:

@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认为父级不是child.parent,而是父级类。当我将父级重命名为parentText时,它可以正常工作。

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

@Entity
class Child extends Parent {
    String parentText;
}

并查询:

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

有效

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

1 个答案:

答案 0 :(得分:1)

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