【问题标题】:How to get the last value of a column using HQL(Hibernate Query Language)如何使用 HQL(休眠查询语言)获取列的最后一个值
【发布时间】:2017-02-23 13:33:07
【问题描述】:

如图,我需要在MySQL中使用hibernate的bookingID列的最后一个值。

@SuppressWarnings("unchecked")
    @Override
    public Booking listBookingsID() {
        Session session = this.sessionFactory.getCurrentSession();
        Booking bookList =  (Booking) session.createQuery("from Booking ORDER BY bookid DESC")
                .setMaxResults(1).uniqueResult();


        return bookList;
    }

我尝试了在this link 中找到的代码,但它始终显示为“9”。如果最后一个值为“1”,那么它应该显示为 1,但它是 9。

所以我的问题是:“是否有任何查询可以获取休眠中列的最后一个值?”

【问题讨论】:

  • 您按 bookindId 列的降序排列。根据屏幕截图,9 是那里的最高值。那么究竟是什么没有按您的预期工作?如果您想要最后一个条目,请不要使用 bookingId,而是按您的主键排序!
  • @911DidBush 即使我们使用主键然后值将显示为 20 但我需要 bookingID 的最后一个值。实际上要求就像“将记录添加到数据库中,但限制为 9。在 9 条记录之后,第 10 条记录应重新开始,bookingID 为 1”
  • 我假设 Booking 是一个包含 id、bookingId 等的实体,对吧?所以Booking booking = (Booking) session.createQuery("from Booking ORDER BY id DESC") .setMaxResults(1).uniqueResult(); return booking.getBookingId();
  • @FIFAoneterahertz,它是ORDER BYid 而不是bookingid
  • @911DidBush,考虑将您的评论作为答案 - OP 似乎不明白其中的区别!

标签: java mysql spring hibernate


【解决方案1】:

数据库表本身没有订单。所以没有直接的方法来查询最后一个条目。

但由于您的表使用自动增量主键 id,您可以通过按此 id 降序排序结果并选择第一个结果来获取最后插入的条目

Booking booking =  (Booking) session.createQuery("from Booking ORDER BY id DESC")
            .setMaxResults(1).uniqueResult();

这将为您提供id 最高的预订,现在您只需选择该条目的bookingId

  return booking.getBookingId();

【讨论】:

  • 是的,感谢您解决了我存在一天的问题。祝你有美好的一天:)
【解决方案2】:

您可以像这样获取表的最大 ID:

HibernateEntityManager he;

long lastID = ((Number) he.createNativeQuery("select max(id) from table;").getSingleResult()).longValue();

然后您可以通过搜索 lastID

的行从中获取 bookingID

如果你使用 JPA,它会是这样的:

long bookingID;
bookingID = bookRepository.findOne(lastID).getBookingID;

【讨论】:

  • 是否通过“会话”和“会话工厂”而不是“HibernateEntityManager”进行查询??
  • 我不知道。我自己也是菜鸟。 HibernateEntityManager 是我目前知道的唯一方法。
【解决方案3】:

试试这个:

Booking bookList =  (Booking) session.createQuery("from Booking ORDER BY bookid DESC")
    .setMaxResults(1).getSingleResult();

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多