java - 如何在 JPA 查询语法中引用映射的超类字段?
问题描述
我有一个包含多个映射超类的类
@EqualsAndHashCode(callSuper = true)
@Entity(name = "Supported_cars_usage")
@Data
@NoArgsConstructor
public class SupportedCarUsage extends SupportedUsageBase {
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "supported_car_id")
private SupportedCar supportedCar;
}
@MappedSuperclass
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
public class SupportedUsageBase extends BaseEntity {
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
User user;
boolean allowed;
}
我正在尝试按某些嵌套字段进行选择、搜索和分组。一开始我发现我可以参考嵌套字段。
我尝试了类似的变化
Query query = em.createQuery("select supportedCar, allowed from Supported_cars_usage");
Query query = em.createQuery("select supportedCar, super.allowed from Supported_cars_usage");
Query query = em.createQuery("select supportedCar, SupportedUsageBase.allowed from Supported_cars_usage");
但因各种错误而失败。这些语法是指映射超类中的字段吗?
数据库本身是正常创建的。
Getter 存在并自动创建Lombok
(参见@Data
注释)。
我不希望使用本机查询。
解决方案
你可以这样写:
List<Object[]> result = em.createQuery("select s.supportedCar, s.allowed from Supported_cars_usage s").getResultList();
推荐阅读
- haskell - 如何使用 Haddock 记录记录类型内的函数参数?
- python - 将文本文件读入矩阵python
- powershell - 通过 Powershell 将计划任务部署到多台计算机
- c++ - C++ `std::move` 自定义类型转换为 lambda 捕获
- asp.net-mvc - 如何将日期时间从 mvc 发送到 web api 作为参数?
- c# - 为什么当我尝试点击操作方法时会出错
- java - 在 Java 中打印数字和非数字
- javascript - 如何使用函数更改 Vue 组件按钮颜色?
- javascript - $(window).on('popstate') 在 IE 中不起作用
- c - 检查给定字符串是否是 C 中的#define