テーブルで特定の条件のデータの重複をチェックする

テーブルで特定の条件のデータの重複をチェックする

タイムカードのページを複数同時に開いた状態で、片方で打刻、もう片方で新規作成のフォームを生成すると、フォームで登録したほうが重複してしまします。なので、フォームを生成する時点で、既に打刻が行われていないかを判定して、仮に打刻が行われている場合は、その打刻の時刻を入力した状態でフォームを生成します。

目的: Java で DBの重複をチェックして、Velocity に情報を渡して分岐させる

対象のユーザーが既に打刻しているかをチェックする

クエリを作って文を作ってフェッチしてリストに保存、リストの長さが1以上なら true を返します。

Calendar from_calendar = Calendar.getInstance();

SelectQuery<EipTExtTimecard> query = Database.query(EipTExtTimecard.class);

Expression exp1 =
      ExpressionFactory.matchExp(EipTExtTimecard.USER_ID_PROPERTY, Integer
        .valueOf(ALEipUtils.getUserId(rundata)));

Expression exp2 =
      ExpressionFactory.matchExp(
        EipTExtTimecard.PUNCH_DATE_PROPERTY,
        from_calendar.getTime());

query.setQualifier(exp1.andExp(exp2));
    List<EipTExtTimecard> date_list = query.fetchList();

if (date_list.size() > 0) {
    date_duplicated = true;
}

この値を velocity 側で参照し、仮に true ならフォームの出勤の打刻を表示する。

(で終わりだと思っていたのですが、これだとデータが重複するのを避けられない気がするので、仕様を確認いたします。)