テーブルで特定の条件のデータの重複をチェックする
タイムカードのページを複数同時に開いた状態で、片方で打刻、もう片方で新規作成のフォームを生成すると、フォームで登録したほうが重複してしまします。なので、フォームを生成する時点で、既に打刻が行われていないかを判定して、仮に打刻が行われている場合は、その打刻の時刻を入力した状態でフォームを生成します。
目的: 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 ならフォームの出勤の打刻を表示する。
(で終わりだと思っていたのですが、これだとデータが重複するのを避けられない気がするので、仕様を確認いたします。)