各プラグイン ポートレットに liferay サービス ビルダー jar を使用しています。だから、新しいレコードを挿入する必要があるとき。以下のコードを使用してレコードを挿入しています。
XXX xxx = XXXLocalServiceUtil.createXXX(CounterLocalServiceUtil.increment(XXX.class.getName()));
xxx.setValue(value);
XXXLocalServiceUtil.addXXX(xxx);
各テーブルには、自動インクリメント付きの主キーがあります。ただし、counter local service util は独自のカウンター値を計算します。各挿入の主キー値が必要です。ただし、この場合、最初のレコードが挿入された場合。レコードには 1 が挿入されますが、liferay カウンターは展開に応じて 101 または 201 を返します。
これはうまくいきます
XXX xxx = new XXXImpl();
xxx.setValue(value);
XXXLocalServiceUtil.addXXX(xxx);
休止状態ごとに正確なキーを取得しました。しかし、私はこれを使用することはできません。サービスビルダーのjarファイルを使っていて、Implクラスがないからです。
Service Builder xml ファイル:
<entity name="XXX" local-service="true"
remote-service="false">
<column name="id" type="long" id-type="increment" primary="true"></column>
<column name="value" type="String" ></column></entity>
説明する別のアプローチ:
こんにちは、すべてのプラグイン ポートレットにサービス ビルダーを使用しています。そして、自動インクリメント付きの主キーを持つカスタムテーブルがあります。今のところ、レコードをテーブルに挿入するこれらの方法があることを知っています。
XXX xxx = XXXLocalServiceUtil.createXXX(0);
xxx.setValue(value);
XXXLocalServiceUtil.addXXX(xxx);
また
XXX xxx = XXXLocalServiceUtil.createXXX(CounterLocalServiceUtil.increment()); // Global increment
xxx.setValue(value);
XXXLocalServiceUtil.addXXX(xxx);
また
XXX xxx = XXXLocalServiceUtil.createXXX(CounterLocalServiceUtil.increment(XXX.class.getName())); // Increment table specific
xxx.setValue(value);
XXXLocalServiceUtil.addXXX(xxx);
最初に、プロマリキー値を取得したい場合、0、2 番目の long 値、3 番目にインクリメントされた値 wrt テーブル名を取得します。私はこれを使用しています。ここで、サービスまたはポートレットのカウンター値を再デプロイすると、101、201、... と増加します。これは、counter.increment.xxx.Class=1 または counter.increment=1 を設定することで処理できます。
しかし、「xxx」からデータベーステーブルの増分値を取得したいだけです。したがって、これを行う方法はあります。このような:
XXX xxx = new XXXImpl();
xxx.setValue(value);
XXXLocalServiceUtil.addXXX(xxx);
ここで、データベーステーブルから必要な値を取得できます。