next601
@next601

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【Java】UUIDで取得した値を配列に格納したい

Q&A

Closed

解決したいこと

【Java】UUIDで取得した値を配列に格納したい

例)
Javaでインフォメーションを作成する機能の中で
新しく作成したインフォメーションの情報を配列化し、複数の行をDBに同時登録したいのですが、UUIDで取得した値を拾うことが出来ません。
解決方法を教えて下さい。

発生している問題・エラー

23502リレーション"trn_information"の列"information_id"のNULL値が非NULL制約に違反しています

該当するソースコード

public String register(InformationModel informationModel) {
        String ret = null;
        String informationId = "";
        if (constants.SCREEN_MODE_NEW.equals(informationModel.getScreenMode())) {
            UUID uuid = UUID.randomUUID();
            informationId = uuid.toString();
        } else {
            informationId = informationModel.getInformationId();
        }
        Map<String, Object> map = new HashMap<>();
        map.put("in_screen_mode", informationModel.getScreenMode());
        map.put("in_company_id", informationModel.getLoginCompanyId());
        map.put("in_information_id", informationId); // 追加: UUIDを代入
        String[] arrInforId = new String[informationModel.getInformationList().size()];
        String[] arrStartDate = new String[informationModel.getInformationList().size()];
        String[] arrEndDate = new String[informationModel.getInformationList().size()];
        String[] arrComment = new String[informationModel.getInformationList().size()];
        for (int i = 0; i < informationModel.getInformationList().size(); i++) {
            arrInforId[i] = (String) informationModel.getInformationList().get(i).get("information_id");
            arrStartDate[i] = (String) informationModel.getInformationList().get(i).get("information_start_date");
            arrEndDate[i] = (String) informationModel.getInformationList().get(i).get("information_end_date");
            arrComment[i] = (String) informationModel.getInformationList().get(i).get("information_comment");
        }
        map.put("in_information_id", arrInforId);
        map.put("in_information_start_date", arrStartDate);
        map.put("in_information_end_date", arrEndDate);
        map.put("in_information_comment", arrComment);
        map.put("in_registered_user_id", informationModel.getLoginUserId());
        try {
            SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate.getDataSource()).withFunctionName("information");
            SqlParameterSource in = new MapSqlParameterSource().addValues(map);
            String out_param = jdbcCall.executeFunction(String.class, in);
            ret = out_param;
            if (constants.OK.equals(ret)) {
                informationModel.setInformationId(informationId);
            }
        } catch (Exception e) {
            ret = e.getMessage();
        }
        return ret;
    }

自分で試したこと

arrInforIdの値がNullなのは確認できたのですが、そこをどう解決すればよいか分からずです、、、
ご教授いただけますでしょうか?

0

3Answer

全てのコードがないので推測ですがinformationModel.getScreenMode()の値がconstants.SCREEN_MODE_NEWと一致していないことでelseルートに入っているのではないでしょうか?
screenModeに入る想定の値を検討してください。
nullが想定されるならnullの場合にはrandomUUIDでIDを生成するなど

新規の場合もarrInforId[i] = (String) informationModel.getInformationList().get(i).get("information_id");で既にある値を繰り返し挿入していますがこちらは想定通りでしょうか。

0Like

InformationListの複数行のinformation_idは、全部UUIDを設定する必要と思います。以下のソースを修正したらいかがですか。
修正前

        for (int i = 0; i < informationModel.getInformationList().size(); i++) {
            arrInforId[i] = (String) informationModel.getInformationList().get(i).get("information_id");
            arrStartDate[i] = (String) informationModel.getInformationList().get(i).get("information_start_date");
            arrEndDate[i] = (String) informationModel.getInformationList().get(i).get("information_end_date");
            arrComment[i] = (String) informationModel.getInformationList().get(i).get("information_comment");
        }

修正後

        for (int i = 0; i < informationModel.getInformationList().size(); i++) {
            if (constants.SCREEN_MODE_NEW.equals(informationModel.getScreenMode())) {
                arrInforId[i] =  UUID.randomUUID().toString();
            } else {
                arrInforId[i] = (String) informationModel.getInformationList().get(i).get("information_id");
            }
            arrStartDate[i] = (String) informationModel.getInformationList().get(i).get("information_start_date");
            arrEndDate[i] = (String) informationModel.getInformationList().get(i).get("information_end_date");
            arrComment[i] = (String) informationModel.getInformationList().get(i).get("information_comment");
        }
0Like

Your answer might help someone💌