hibernate怎么调用mysql中的year,month,concat等函数
2个回答
2018-07-25 · 知道合伙人软件行家
关注
展开全部
year(), month(), concat() 是 mysql 特有的函数,其他数据库也有对应的函数,而 hibernate 存在的意义就是屏蔽这些数据库特有的东西,这样的话:
如果数据库的 datetime/date 之类的字段并没有和 Java 的 Date 或 Calender 属性进行映射的话,无论你使用 HQL 还是Criteria 都无法实现对日期的操作,因为 HQL 和 Criteria 都是基于对象的查询方式。
基于对象的查询,如下,先做映射
@Entity
@Table(name="PREFERRED_CUSTOMER")
public PCustomer {
@Column(name = "EXPIRATION_DATE")
@Temporal(TemporalType.DATE)
protected java.util.Date expirationDate; // only day, month, year
}
可以使用 HQL 这么查询:
List<PCustomer> list = session
.createQuery("from PCustomer pc where pc.expirationDate = :edate")
.setParameter("edate", new java.util.Date(), TemporalType.DATE)
.list();
hibernate 屏蔽了数据库特有的东西,是为了方便移植,但有的老项目较多地使用了数据库特有的东西,如MSSQL 的 T-SQL,这时,就需要使用 hibernate 对 SQL 的原生支持,Session 提供了 createSQLQuery() 这样的方法,此时的 hibernate 就相当于一个简单的 mapper,只提供对象关系映射,当然,一旦你在代码中使用了对 SQL 的原生支持,移植性就不好了。
此种方式可以使用你所说的 MySQL 函数
如果数据库的 datetime/date 之类的字段并没有和 Java 的 Date 或 Calender 属性进行映射的话,无论你使用 HQL 还是Criteria 都无法实现对日期的操作,因为 HQL 和 Criteria 都是基于对象的查询方式。
基于对象的查询,如下,先做映射
@Entity
@Table(name="PREFERRED_CUSTOMER")
public PCustomer {
@Column(name = "EXPIRATION_DATE")
@Temporal(TemporalType.DATE)
protected java.util.Date expirationDate; // only day, month, year
}
可以使用 HQL 这么查询:
List<PCustomer> list = session
.createQuery("from PCustomer pc where pc.expirationDate = :edate")
.setParameter("edate", new java.util.Date(), TemporalType.DATE)
.list();
hibernate 屏蔽了数据库特有的东西,是为了方便移植,但有的老项目较多地使用了数据库特有的东西,如MSSQL 的 T-SQL,这时,就需要使用 hibernate 对 SQL 的原生支持,Session 提供了 createSQLQuery() 这样的方法,此时的 hibernate 就相当于一个简单的 mapper,只提供对象关系映射,当然,一旦你在代码中使用了对 SQL 的原生支持,移植性就不好了。
此种方式可以使用你所说的 MySQL 函数
推荐于2016-04-24 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517201
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
year(), month(), concat() 是 mysql 特有的函数,其他数据库也有对应的函数,而 hibernate 存在的意义就是屏蔽这些数据库特有的东西,这样的话:
如果数据库的 datetime/date 之类的字段并没有和 Java 的 Date 或 Calender 属性进行映射的话,无论你使用 HQL 还是Criteria 都无法实现对日期的操作,因为 HQL 和 Criteria 都是基于对象的查询方式。
基于对象的查询,如下,先做映射
@Entity
@Table(name="PREFERRED_CUSTOMER")
public PCustomer {
@Column(name = "EXPIRATION_DATE")
@Temporal(TemporalType.DATE)
protected java.util.Date expirationDate; // only day, month, year
}
可以使用 HQL 这么查询:
List<PCustomer> list = session
.createQuery("from PCustomer pc where pc.expirationDate = :edate")
.setParameter("edate", new java.util.Date(), TemporalType.DATE)
.list();
hibernate 屏蔽了数据库特有的东西,是为了方便移植,但有的老项目较多地使用了数据库特有的东西,如MSSQL 的 T-SQL,这时,就需要使用 hibernate 对 SQL 的原生支持,Session 提供了 createSQLQuery() 这样的方法,此时的 hibernate 就相当于一个简单的 mapper,只提供对象关系映射,当然,一旦你在代码中使用了对 SQL 的原生支持,移植性就不好了。
此种方式可以使用你所说的 MySQL 函数
如果数据库的 datetime/date 之类的字段并没有和 Java 的 Date 或 Calender 属性进行映射的话,无论你使用 HQL 还是Criteria 都无法实现对日期的操作,因为 HQL 和 Criteria 都是基于对象的查询方式。
基于对象的查询,如下,先做映射
@Entity
@Table(name="PREFERRED_CUSTOMER")
public PCustomer {
@Column(name = "EXPIRATION_DATE")
@Temporal(TemporalType.DATE)
protected java.util.Date expirationDate; // only day, month, year
}
可以使用 HQL 这么查询:
List<PCustomer> list = session
.createQuery("from PCustomer pc where pc.expirationDate = :edate")
.setParameter("edate", new java.util.Date(), TemporalType.DATE)
.list();
hibernate 屏蔽了数据库特有的东西,是为了方便移植,但有的老项目较多地使用了数据库特有的东西,如MSSQL 的 T-SQL,这时,就需要使用 hibernate 对 SQL 的原生支持,Session 提供了 createSQLQuery() 这样的方法,此时的 hibernate 就相当于一个简单的 mapper,只提供对象关系映射,当然,一旦你在代码中使用了对 SQL 的原生支持,移植性就不好了。
此种方式可以使用你所说的 MySQL 函数
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询