JPA - 映射来自实体的附加计算值
Posted
技术标签:
【中文标题】JPA - 映射来自实体的附加计算值【英文标题】:JPA - mapping additional calculated value from an entity 【发布时间】:2019-06-17 12:54:25 【问题描述】:我有一个名为Taxi
的实体,其中保存了它的位置信息。我有一个存储过程,它返回这个实体字段和一个名为“距离”的附加字段,由存储过程计算。问题是我从显然没有距离字段的存储过程中返回出租车实体,我如何获得这个计算出的距离字段?
看起来是这样的:
List<Taxi> getTaxisAroundMe(Integer customerId,Integer distance);
【问题讨论】:
【参考方案1】:介绍:
@Entity
@Immutable
public class TaxiReadOnly extends Taxi
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", updatable = false, nullable = false)
private Long /*?*/ id;
private Integer distance;
//get+set
然后:
public interface TaxiReadOnlyRepository
List<TaxiReadOnly> calcDistance(/*input params*/);
// as before
public interface TaxiRepository extends CrudRepository<Taxi, Long>,
//but now with
TaxiReadOnlyRepository
// and
public class TaxiReadOnlyRepositoryImpl implements TaxiReadOnlyRepository
@PersistenceContext
private EntityManager em;
@Override
public List<TaxiReadOnly> calcDistance(/*input params*/)
return em.createNativeQuery("BEGIN call_ur_procedure(:inParam1, ...); END;")
//.setParameter("inParam1", inParam1)
.getResultList();
见:
https://thoughts-on-java.org/hibernate-tips-map-view-hibernate/ https://dzone.com/articles/calling-stored-procedures-from-spring-data-jpa【讨论】:
非常感谢,TaxiReadOnly 工作正常,但现在当我从 Taxi 中找到所有内容时,它显示 Unknown column 'taxi0_.distance' 现在我已经复制了 Taxi 并将其命名为 TaxiReadOnly 并仅添加了 Entity 和 @Immutable 注释,并为其创建了 repo 类,这似乎工作正常,但我不是这样做的“正确”它,任何帮助将不胜感激以上是关于JPA - 映射来自实体的附加计算值的主要内容,如果未能解决你的问题,请参考以下文章