【问题标题】:SPRING data REST :How to select specific field from the repositorySPRING data REST:如何从存储库中选择特定字段
【发布时间】:2017-11-14 21:07:11
【问题描述】:

在以下查询中,我只想从订单中选择 shopname,但是当我执行查询时,它给了我一个错误 PersistentEntity must not be null 我已经搜索过这个问题,但我找不到任何解决方案 如何从 Order 表中只获取选定的行?

OrderRepository

public interface OrderRepository extends JpaRepository<Order, Long> {
@Query("Select o.shopName from Order o where o.customer.id= :customerId ")
     String selectUsersOrder(@Param("customerId") Long customerId );
}

Order.class

@Entity
@Table(name="CustomerOrder")
public class Order implements Serializable,OrderGetters {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column( nullable = false, updatable = false, insertable = false, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
    @Temporal(TemporalType.TIMESTAMP)
    private Date orderDate ;

    @OneToMany(mappedBy="order",targetEntity=OrderItem.class)
    private List<OrderItem> orderitem;

    @Temporal(TemporalType.TIMESTAMP)
    private Date completionDate ;

    @Enumerated(EnumType.STRING)
    private OrderStatus orderStatus;

    @Enumerated(EnumType.STRING)
    private DeliveryStatus deliveryStatus;



    private String riderInstruction;

    @Enumerated(EnumType.STRING)
    private OrderType orderType;

    @ManyToOne
    private User customer;


    @OneToOne
    private User rider;

    @OneToOne
    private Address dropOffAddress;

    @OneToOne
    private Address pickupAddress;

    private String receiverName;

    private String promoCode;

    private String shopName;

    private float shoppingPrice;

    private float orderPrice;

    private float cashCollected;

    ..... Getter and setters
    }

【问题讨论】:

  • 您可以使用 JPA 投影。查看this 答案。
  • 如果答案对您有帮助,请不要忘记接受/投票...

标签: java mysql spring repository spring-data-jpa


【解决方案1】:

您可以通过将 nativeQuery 值设置为 'true' 来使用 Spring 的 nativeQuery 属性:

@Query("SELECT ShopName FROM CustomerOrder WHERE CustomerId = ?1", nativeQuery = true)
String selectUsersOrder(Long customerId);

或者您可以在获取时先将其转换为 Object[],而不是从该对象中获取您想要的值。

【讨论】:

    【解决方案2】:

    您应该使用 Projection 并从 Repo 中删除您的自定义方法。

    @Projection(name = "onlyShopName", types = {Order.class})
    public interface OnlyShopName { 
    
        String getShopName();
    }
    

    然后像这样获取您的订单:

    GET http://localhost:8080/orders?projection=onlyShopName
    

    【讨论】:

      猜你喜欢
      • 2017-08-13
      • 2017-04-30
      • 1970-01-01
      • 2017-03-04
      • 2016-03-06
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多