![](/img/trans.png)
[英]Hibernate/JPA map Result of native Query to non-Entity holding Entities
[英]Can I map the result of a hibernate/jpa query to a class that is not an entity?
我正在尝试使用 Springboot,我有几个具有非常相似的属性的实体,例如:实体“汽车”具有 model 和价格属性,“摩托车”model 也是如此。 我想使用 aa class 来定义那些常见的属性,class “车辆”,属性为 model 和价格。
换句话说:
Car Motorcicle Vehicle
price price price
model model model
year year
color color
fuel_type fuel_type
... 30 more properites ...30 more properties
我想使用车辆 map 搜索汽车和摩托车表之间的 SQL 联合的搜索结果。
public interface ImovelRepositorio extends JpaRepository<Vehicle, Long> {
@Query(value = "here select query with union between car and motorcycle", nativeQuery = true)
List<Vehicle> searchVehicle();
}
这里的 Vehicle class 是没有任何注释的普通 class。 我收到错误消息说 Vehicle 不是托管类型。 当然我的存储库没有意义,我预计会出现这个错误。 但是我怎样才能实现我想要的呢?
当我执行联合时,我没有得到模型列表,而是得到一个或多个模型的列表。 我想创建一个 class 来“组合”搜索结果。
您可以使用@MappedSuperClass,其中车辆可以是映射的超级 class。 其余的类可以扩展它。 有点像下面:
超级class:
@MappedSuperClass
class Vehicle {
// constructor, getters, setters
}
实体类:
@Entity
class Car extends Vehicle {
// constructor, getters, setters
}
@Entity
class MotorCicle extends Vehicle {
// constructor, getters, setters
}
FluentJPA 有针对这种情况的解决方案。
我看到你使用 SpringData JPA。 在 JPQL 中,您可以通过select new fully.qualified.name.of.your.Class(field1, field2) from Entity
等来实现这一点。您必须在 class fully.qualified.name.of.your.Class
中有适当的构造函数. 这个 class 不必是@Entity
- 它可以是任何常见的 POJO 或任何你想要的东西。
但是,我看到您也使用本机查询。 对于本机查询,这将不起作用 - 您必须将返回类型声明为List<Object[]>
并自己进行映射,或者将@NamedNativeQuery
与@SqlResultSetMapping
一起使用。 但是你真的需要一个本地查询吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.