まっさんの日記

まっさんの日記

PR

×

カレンダー

キーワードサーチ

▼キーワード検索

コメント新着

Mizuki8515 @ Re:塗装の縮れ(対策)(10/07) この方法は確かに有効そうですね。クリア…
2021.06.04
XML
カテゴリ: 仕事
昨日からちょっとしたバグに悩まされていたわけですが、
先ほど解決しました。
ひとつは完全な自分が考えた仕様のバグ、
もうひとつは、利用しているOSSの仕様がらみ。

もともとソフトウェアエンジニア(アプリケーション開発)でなく、
インフラエンジニア(サーバとかネットワーク)でしたので、
本格的にjavaをやってきたわけではないですが、
javaに限らず、それなりにコードは書けます。

自分が考えた仕様のバグは、

履歴系なので削除するのではなく論理削除して、
使えなくしないといけないのですが、
通常は削除フラグとかで管理することが多い。
項目を追加すればと思ったのですが、
検索を考慮するとインデックスが必要になるので、
スマホで扱うにはコストが大きすぎる。
最初に思いついたのが、
インデックスがついている項目をマイナスにして、
インデックスを生かしつつ、
削除データと生きているデータを判断する方法。
コーディングが進むにつれ、

別の方法を模索して、
生きているデータ(マスタ)と履歴データの
コードの帯域を分離して管理することで解決。

もうひとつが、
Room(SQLLite)のコンビニエンスメソッド(アノテーションでINSERTかとDELETEを指定)の振る舞い。

レコードをオブジェクト型で渡してあげるとSQLを書かなくても、
追加(INSERT)、削除(DELETE)、更新(UPDATE)を実行してくれるというもの。

この中で問題となったのが追加。
主キーは、AUTOINCREMENT(自動採番)としているので、
主キーを除く項目に値をセットしてわたせば追加してくれる。
ここであるレコードのコピーを作る場合に、
複製元のオブジェクトを渡してあげれば、追加してくれることを期待したが、
主キーに複製元のキーが設定されているので、追加してくれない。
まぁ、これは想定内。
AUTOINCREMENTの主キーはINTEGER型(数値)でなくてはならないので、
数値型の初期値といえば0ということで、
0を与えて追加すると、主キーが0のレコード追加されてしまう。
渡すオブジェクトの主キーがnullでないと、INSERTで主キーが自動採番されない仕様?みたい。
実体化したオブジェクトのINTEGER型の項目にnullを設定できないし、困ったというわけ。
結局、新しくオブジェクトを生成(コンストラクタは主キー以外を項目を渡すので、
主キー以外の項目を複製元のオブジェクトを指定)するというコードで解決しました。

javaに限らず、コードはnullとの闘いですな。





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2021.06.04 16:28:08
コメント(0) | コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: