16

hibernate HQL を使用してデータ時間操作を実行したいと考えています。

特定の日付から 1 年または 1 か月を減算するだけでなく、2 つの日付を加算および減算したい。

休止状態でHQLを使用してこれをどのように可能にしますか?

4

8 に答える 8

10

独自の方言を作成する必要があります。次のようなもの:

public class MyDialect extends MySQLInnoDBDialect{
      public MyDialect() {
      super();
      registerFunction("date_add_interval", new SQLFunctionTemplate(Hibernate.DATE, "date_add(?1, INTERVAL ?2 ?3)"));
      }
    }
于 2009-10-28T01:21:48.120 に答える
7

HQL で日付/時刻計算を実行するを参照してください 。 たとえば。

カスタム SQL を使用するには、独自の hibernate ダイアレクトを作成して登録する必要があります。

registerFunction("weekday", 
  new SQLFunctionTemplate(Hibernate.INTEGER, "to_char(?1,'D')") );
于 2009-06-24T11:07:17.473 に答える
5

これはHibernateの未解決の問題です。Hibernate 3.3の時点では、純粋にHQLで日付比較を処理する標準的な方法はありません。

https://hibernate.atlassian.net/browse/HHH-2434

Hibernate 4.3は、HQLの日付/時刻にアクセスするための機能を提供します。

current_timestamp() , current_date() , current_time()

算術演算は次の方法で管理できます。

SECOND(...) , MINUTE(...) , HOUR(...) , DAY(...) , MONTH(...) , YEAR(...)
于 2010-07-14T20:40:46.377 に答える
1

免責事項: 私は Java の初心者です

current_date() >= fromDate AND dateadd(day, -1, getdate()) <= toDate関数を登録せずに、Hibernate 3.5.3 の Sybase データベースに対して HQL ステートメントで使用できました。

于 2012-09-10T21:02:40.110 に答える
0

JPA + Hibernate 4.3.1 + MySQL 5 の方言によるアプローチの使用例

public class SampleMySQL5InnoDBDialect extends org.hibernate.dialect.MySQL5InnoDBDialect {

public SampleMySQL5InnoDBDialect() {
    super();
    registerFunction("date_sub_days", new SQLFunctionTemplate(StandardBasicTypes.DATE, "date_sub(?1, interval ?2 day)"));
}

次に、マッピング注釈を使用したクラスの場合:

@NamedQuery(name = "SampleEntity.getSampleEntitiesForGapOverlapCalculations", query = "from SampleEntity as se where "
    + "((se.toDate between :startDate and :endDate) or (date_sub_days(se.toDate, se.duration) between :startDate and :endDate)) order by se.toDate asc, se.duration desc")

SampleEntityにはjava.sql.Date 型のtoDateフィールドと期間整数フィールド (日数) があり、fromDate = toDate - 期間を計算し、間隔[startDate, endDate]内にfromDateまたはtoDateを持つすべてのエンティティを選択します。

于 2013-06-14T14:27:29.937 に答える