0

私は ORMLite を使用しており、ORMLite dao フレームワークから拡張されたカスタム DAO を作成しました。カスタム dao では、create メソッドをオーバーライドし、いくつかのロジックを追加します。エンティティのリストを照会し、存在しない場合は新しいエンティティを作成し、存在する場合は既存のエンティティの ID を返します。実行時にリストオブジェクトをデバッグおよびチェックしているため、クエリは正常に機能しています。ただし、リスト サイズが 0 の場合は常に、if..else の最初のブロックを実行し、次に 2 番目のブロックを実行して、return ステートメントを完全に無視します。リストが空でない場合、期待どおりに機能します。

なぜこれがファンキーに振る舞うのか誰にも分かりますか?何らかの理由で再帰的に自分自身を呼び出している場合に備えて、オーバーライドメソッド名を「persist」に変更しましたが、機能しませんでした。

@Override
public int create(DigitalAsset dAsset) throws SQLException {
        List<DigitalAsset> assets = this.queryForMatching(dAsset);

        if (assets.size() == 0) {
            return super.create(dAsset);
        }
        else {
            return assets.get(0).getId();
        }
    }
4

1 に答える 1

0

今はかなりばかげているように感じますが、さらに調査したところ、ORMLite create メソッドは ID ではなく、影響を受ける行の数を返すことがわかりました。コードは両方のブロックをまったく通過していないことがわかりました。遅かったし、その時はおそらく完全に気づいていなかったでしょう。

于 2012-09-10T13:55:03.877 に答える