【问题标题】:How to find List<Object> sorted by Date如何查找按日期排序的 List<Object>
【发布时间】:2019-05-29 12:58:57
【问题描述】:

我正在尝试为购买构建简单的 REST 我需要两种方法。 Firstone 应显示按日期排序的所有购买 Secondone 删除指定日期的所有购买 我做了一个添加和获取所有购买的方法。 现在我被卡住了。

@Entity
@Table (name="purchase")
public class Purchase {

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

 @Column(name = "name")
 private String name;

 @CreationTimestamp
 @Temporal(TemporalType.DATE)
 @Column(name="createat")
    private Date created;

 @Column(name="price")
 private BigDecimal price;


@Column(name="currency")
private String currency;
@Repository
public interface PurchaseRepository extends JpaRepository<Purchase, Long> {
}

@Service
public class PurchaseService {

    @Autowired
    private PurchaseRepository purchaseRepository;

    public void addPurchase(Purchase purchase) {
        purchaseRepository.save(purchase);
    }

    public List<Purchase> getAllPurchase() {

        List<Purchase> purchase = new ArrayList<>();
        purchaseRepository.findAll().forEach(purchase::add);
        return purchase;
    }
}

@RestController
public class PurchaseController {

    @Autowired
    private PurchaseService purchaseService;

    @PostMapping("/purchase")
    public void addPurchase(@RequestBody Purchase purchase) {
        purchaseService.addPurchase(purchase);
    }

    @RequestMapping("/purchase")
    public List<Purchase> getAllTopics() {
        return purchaseService.getAllPurchase();
    }
}

找不到解决方案和实现: 我希望有 1 种方法可以按日期排序我的列表 2 删除指定日期所有购买的方法

【问题讨论】:

  • HQL 最适合你
  • 你可以用这个来排序:list.sort(Comparator.comparing(Purchase::getDate))
  • 我已经尝试过-list.sort(Comparator.comparing(Purchase::getDate)),但它不起作用

标签: java hibernate jpa


【解决方案1】:

假设您使用 Spring 作为注释显示,还假设您使用 SpringData 作为数据库通信的抽象层。您不应该扩展 JPARepository,而是应该扩展 CrudRepository。在那里,您可以通过特殊的命名约定或 HQL 来定义查询。

例如:

@Repository
public interface PurchaseRepository extends CrudRepository<Purchase, Long> {
    List<Purchase> findAllOrderByDate();

    long deleteByDate(Date date);
}

deleteByDate 函数将返回已删除行的计数。

如您所见,您可以按名称定义查询。欲了解更多信息:https://docs.spring.io/spring-data/data-commons/docs/2.1.8.RELEASE/reference/html/

更新:实现只是一个示例,您不能复制和粘贴它并按原样使用它。正如在提到的文档中解释的那样,您可以通过特殊的命名约定定义查询,该约定允许您使用实体中的属性名称以语义方式定义查询。在您的情况下,这将是 findAllOrderByCreatedAscfindAllOrderByCreatedDesc 同样适用于删除。

【讨论】:

  • 您也可以通过在函数名称中添加 Desc 或 Asc 来更改订单方向
  • 在我添加 List findAllOrderByDate();我得到应用程序启动失败,原因是:java.util.NoSuchElementException:null。我需要什么实现吗?
猜你喜欢
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 2016-08-01
  • 2011-10-23
  • 1970-01-01
  • 2016-10-03
相关资源
最近更新 更多