0

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

我是 Liferay 的新手,所以任何帮助将不胜感激......!!!

4

2 回答 2

0

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

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

成功构建后,deleteAllLocations将被复制到LocationLocalServiceUtil.java您可以在操作类中使用它的位置,如下所示:

LocationLocalServiceUtil.deleteAllLocations();
于 2016-02-22T13:31:30.083 回答
0

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

  1. 您可以直接访问持久性 bean,因此无需使用LocationUtil.
  2. 接受的答案建议捕获任何Exception并记录它。我不同意这一点,因为它会默默地失败,并且取决于应用程序逻辑,以后可能会导致问题。例如,如果您removeAll在成功取决于正确删除所有实体的事务中被调用,并且接受的方法失败,则事务将不会回滚,因为您没有抛出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实体而不在该事务的上下文中执行任何其他操作,则可以LocationUtil在控制器中使用。这将使您不必重建服务层。

于 2018-07-04T11:14:37.060 回答