【问题标题】:JPA - mapping additional calculated value from an entityJPA - 映射来自实体的附加计算值
【发布时间】:2019-06-17 12:54:25
【问题描述】:

我有一个名为Taxi 的实体,其中保存了它的位置信息。我有一个存储过程,它返回这个实体字段和一个名为“距离”的附加字段,由存储过程计算。问题是我从显然没有距离字段的存储过程中返回出租车实体,我如何获得这个计算出的距离字段?

看起来是这样的:

List<Taxi> getTaxisAroundMe(Integer customerId,Integer distance); 

【问题讨论】:

    标签: hibernate spring-boot jpa orm spring-data-jpa


    【解决方案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();
      }
    }
    

    见:

    【讨论】:

    • 非常感谢,TaxiReadOnly 工作正常,但现在当我从 Taxi 中找到所有内容时,它显示 Unknown column 'taxi0_.distance'
    • 现在我已经复制了 Taxi 并将其命名为 TaxiReadOnly 并仅添加了 Entity 和 @Immutable 注释,并为其创建了 repo 类,这似乎工作正常,但我不是这样做的“正确”它,任何帮助将不胜感激
    猜你喜欢
    • 2011-07-13
    • 2021-07-23
    • 1970-01-01
    • 2012-09-25
    • 2012-02-02
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多