【发布时间】:2018-10-12 08:23:59
【问题描述】:
我有一个有点复杂的实体,如下所示(注意具有更多字段的超类):
public class Question extends Entry {
@OneToMany(orphanRemoval = true, mappedBy = "question")
@JsonManagedReference
private List<Answer> answers = new ArrayList<>();
private Long viewCount = 0L;
private Category category;
@OneToMany(mappedBy = "question", fetch = FetchType.LAZY,
cascade = CascadeType.ALL, orphanRemoval = true)
private List<QuestionTranslation> translations = new ArrayList<>();
@Transient
private double distance;
}
distance 应在从本机查询检索结果集时从数据库计算。
例如
SELECT q.*, ST_Distance_Sphere(cast(q.location as geometry), ST_MakePoint(cast(?1 as double precision), cast(?2 as double precision))) as distance from question q
我不能使用@Formula 来注释我的字段distance,因为查询必须接受参数。
如何将 SQL 查询结果中的字段 distance 映射到我的实体字段 distance,同时让所有其他映射由 Hibernate 完成?
编辑
根据@gmotux 的建议,我创建了一个包装实体。
@Entity
@SqlResultSetMapping(
name="MappingQ",
entities={
@EntityResult(
entityClass = QuestionWithDistance.class,
fields={
@FieldResult(name="distance",column="distance"),
@FieldResult(name="question",column="question")})})
public class QuestionWithDistance{
@Id
@GeneratedValue
private String id;
@OneToOne
private Question question;
private double distance;
}
查询
Query query = entityManager.createNativeQuery("SELECT q.*, 222.22 as distance from question q", "MappingQ");
但它总是失败
org.postgresql.util.PSQLException: The column name id1_15_0_ was not found in this ResultSet.
【问题讨论】:
-
你好@isADon,我有同样的问题(使用 MySQL 代替)。你找到解决办法了吗?