根据插入时间从 table 中删除行
Detele row from a table based of the time of insertion
有没有什么办法,使用 Hibernate HQL 删除例如包含列类型 TIMESTAMP[ 的最旧的 3 行=16=] 插入行的时间?
首先,您可以创建一个查询,以获取 YourTable
table:
中最旧的 3 条记录
String hql1 = "select t.time from YourTable t order by t.time asc";
Query query1 = session.createQuery(hql1);
query1.setMaxResults(3);
List results = query1.list();
接下来,执行 HQL 查询以删除与这 3 个时间戳匹配的所有记录:
String hql2 = string.Format("delete from YourTable t WHERE t.time IN ({0})",
string.Join(",", results.ToArray()));
Query query2 = session.createQuery(hql2);
int result = query2.executeUpdate();
System.out.println("Number of row deleted: " + result);
此答案假定您的 table class 称为 YourTable
,它有一个名为 time
的字段(列)。它还假定每个时间戳都是唯一的,但事实可能并非如此。如果不能保证您的时间戳是唯一的,那么您可能希望使用主键进行删除。
有没有什么办法,使用 Hibernate HQL 删除例如包含列类型 TIMESTAMP[ 的最旧的 3 行=16=] 插入行的时间?
首先,您可以创建一个查询,以获取 YourTable
table:
String hql1 = "select t.time from YourTable t order by t.time asc";
Query query1 = session.createQuery(hql1);
query1.setMaxResults(3);
List results = query1.list();
接下来,执行 HQL 查询以删除与这 3 个时间戳匹配的所有记录:
String hql2 = string.Format("delete from YourTable t WHERE t.time IN ({0})",
string.Join(",", results.ToArray()));
Query query2 = session.createQuery(hql2);
int result = query2.executeUpdate();
System.out.println("Number of row deleted: " + result);
此答案假定您的 table class 称为 YourTable
,它有一个名为 time
的字段(列)。它还假定每个时间戳都是唯一的,但事实可能并非如此。如果不能保证您的时间戳是唯一的,那么您可能希望使用主键进行删除。