1

各プラグイン ポートレットに 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);

ここで、データベーステーブルから必要な値を取得できます。

4

1 に答える 1