hibernate - 如何在时间戳属性的年份部分制定标准?
问题描述
@Entity
@Table(name = "demandefraismission")
public class DemandeFraisMission extends BaseModele {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
// ...
@Column(name = "datevalidation")
private Timestamp datevalidation;
// ...
}
@Override
public List<DemandeFraisMission> listeDmdValidatedAnneeAvant(String site, String anneeAvantValidation) {
List<DemandeFraisMission> retour = null;
try {
Session session = null;
if (entityManager == null
|| (session = entityManager.unwrap(Session.class)) == null) {
throw new NullPointerException();
}
Criteria criteria = session.createCriteria(DemandeFraisMission.class, "i");
criteria.add(Restrictions.eq("i.lieumission", site));
criteria.add(Restrictions.like("i.datevalidation", anneeAvantValidation, MatchMode.START));
criteria.add(Restrictions.eq("i.status", "Validée"));
criteria.addOrder(Order.desc("id"));
retour = criteria.list();
System.out.println(retour);
} catch (Exception ex) {
ex.printStackTrace();
}
return retour;
}
如何在datevalidation
属性上制定标准,但仅在时间戳值的年份部分上?
解决方案
尝试使用这样的东西:
import org.hibernate.type.IntegerType;
// ...
Integer expectedYear = 2020;
// ...
criteria.add(
Restrictions.sqlRestriction(
"EXTRACT(YEAR FROM datevalidation) = ?",
expectedYear,
IntegerType.INSTANCE
)
)
请参阅休眠文档的这一部分。
该EXTRACT()
函数是 MySQL、Oracle、PostgreSQL 和 Firebird 支持的 SQL 标准函数。如果您使用 SQL Server,您可以使用YEAR()
orDATEPART()
函数从日期中提取年份。
推荐阅读
- windows-10 - Vagrant up 挂起清除任何先前设置的网络接口
- r - 带有 predict_json 的 H2o:“错误:无法找到或加载主类 water.util.H2OPredictor”?
- python - Python - 将字符串数字转换为浮点数
- javascript - 如何将 API 输出保存到 html 页面中的表中?
- c - 有人可以解释这段代码的逻辑吗?
- crystal-reports - VS 2017 Crystal Reports 设置参数时找不到表错误
- swift - 快速显示进度视图
- php - 注意:常量 WPCF7_AUTOP 已经定义在
- android - 我的自定义 BroadcastReceiver 无法在 API 级别 16 以上工作
- fortran - 使用 Fortran 从文件中提取指定行