java - 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%")
)
这样可行,
但是有什么解决方案我不需要重命名列名?我的意思是我可以重命名该列来解决这个问题,但还有其他选择吗?
解决方案
不
除了重命名之外,没有其他解决方案。
推荐阅读
- java - 带有 Seekbar 的音乐播放器 (Android Studio)
- pyspark - 为什么这个 spark sql 查询返回 null 的列的总和?
- powershell - 如何在powershell命令中使用环境变量
- haskell - 为什么这些在 Haskell 中被认为是高阶函数?
- php - 剥离标签并用单个空格替换所有 br 和 p 标签
- javascript - HTML CSS 逐一滚动文本
- c# - 如何在 IIS 中运行 .Net MVC(与使用 `dotnet run` 进行本地测试相比)
- cakephp - 在 CakePHP 中扩展 RedisEngine
- javascript - 为什么两个数字的乘积会产生一个不应该存在的小数(仅适用于特定数字)?
- java - Java如何读取从其他公共类方法传递给args [0]的变量