用户登录
用户注册

分享至

hibernate concat

  • 作者: 女鬼般若
  • 来源: 51数据库
  • 2020-12-14
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 函数



  没看懂什么意思?



  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 函数
软件
前端设计
程序设计
Java相关