2

フィールド名を使用して特定のレコードを削除したい

表:ダミーエンティティ

  • フィールド ID
  • フィールド名

    public void deleteLocation(req, res){
    String getLocationName = request.getParameter("locationName");
    Location locationToDelete = new LocationImpl();
    locationToDelete.setLocationName(getLocationName);
    LocationLocalServiceUtil.deleteLocation(locationToDelete);
    }
    

エラーは表示されませんが、レコードは削除されません。私を助けてください。

4

2 に答える 2

2

これを実現する最も簡単な方法は、次のよう<finder>に特定のフィールドのノードをに追加し(はエンティティ名、はフィールド名、は のファインダ エントリの名前です)、サービスを構築することです。service.xmlLocationnameNameservice.xml

<column name="name" type="String" />

<finder name="Name" return-type="Collection">
    <finder-column name="name" />
</finder>

ビルドが成功すると、その列に基づいてサービスに CRUD 操作が作成されます。で次のメソッドを見つけることができますLocationUtil.java

findByName,
removeByName,
countByName,

に次の (新しい) メソッドを作成しますLocationLocalServiceImpl.java

public void deleteLocationsByName(String name){
    try{
        LocationUtil.removeByName(name);
    }catch(Exception ex){
        // log your exception
    }
}

繰り返しますが、サービスの構築時に、このメソッドはアクション クラス from で使用LocationLocalServiceUtil.javaできるようになり、次のように呼び出すことができます。

public void deleteLocation(req, res){
    String locationName = request.getParameter("locationName");
    LocationLocalServiceUtil.deleteLocationsByName(locationName);
}

これで、カスタム finder メソッドがサービスに追加されました。

于 2016-02-23T06:09:32.927 に答える
1

ID で要素を削除する場合は、「LocalServiceUtil.delete(id)」で実行できます ID 以外のフィールドで要素を削除する場合は、そのためのカスタム クエリを実行する必要があり、検索できます次の例を含むファイル: portal.xml のポータル ソース:

<sql id="com.liferay.portal.service.impl.ResourceBlockLocalServiceImpl.deleteResourceBlock">
        <![CDATA[
            DELETE FROM
                ResourceBlock
            WHERE
                (referenceCount <= 0) AND
                (resourceBlockId = ?)
        ]]>
    </sql>

カスタム クエリの実装方法は次のとおりです。

https://dev.liferay.com/develop/tutorials/-/knowledge_base/6-2/developing-custom-sql-queries

于 2016-02-22T19:00:47.683 に答える