使用Liferay Service Builder删除所有记录

时间:2016-02-22 12:55:09

标签: java liferay liferay-6 liferay-service-builder

我可以使用Liferay Service Builder删除特定记录,但是当我想删除该表中的所有记录时该怎么做。

我是Liferay的新手所以任何帮助都会受到赞赏...... !!!

2 个答案:

答案 0 :(得分:0)

由于您的实体名称为Location,请在LocationLocalServiceImpl.java和构建服务中添加以下方法:

public void deleteAllLocations(){
    try{
        LocationUtil.removeAll();
    }catch(Exception ex){
        // Log exception here.
    }
}

成功构建后,deleteAllLocations将被复制到LocationLocalServiceUtil.java,您可以在其中将其用作动作类:

LocationLocalServiceUtil.deleteAllLocations();

答案 1 :(得分:0)

该问题已经有了一个问询,要求问问者满意,但我想我会再添加一个相同的答案。由于您是在服务实现中编写自定义方法(在您的情况下为LocationLocalServiceImpl):

  1. 您可以直接访问持久性bean,因此无需使用LocationUtil
  2. 可接受的答案建议捕获任何Exception并将其记录下来。我不同意这一点,因为它会静默地失败,并且取决于应用程序逻辑,以后可能会引起问题。例如,如果在事务中调用了removeAll,而该事务的成功取决于是否正确删除所有实体,而接受的方法失败,则该事务将不会回滚,因为您不会抛出{{1} }。

考虑到这一点,请考虑以下内容(在您的实现中,如上所述):

SystemException

然后,无论您在哪里调用它(例如在控制器中),都可以控制发生故障时的情况

public void deleteAllLocations() throws SystemException {
    locationPersistence.removeAll();
}

话虽如此,您的try { LocationLocalServiceUtil.removeAllLocations(); } catch (SystemException e) { // here whatever you've removed has been rolled back // instead of just logging it, warn the user that an error occurred SessionErrors.add(portletRequest, "your-error-key"); log.error("An error occurred while removing all locations", e); } 类在服务之外可用,因此您可以从控制器中调用它。如果您的目标只是删除所有LocationUtil实体而不在该事务的上下文中执行任何其他操作,则可以在控制器中使用Location。这将使您不必重建服务层。