Как получить идентификатор первичного ключа из таблицы с помощью Hibernate для обновления таблицы при отмене публикации страницы Tridion
Я успешно смог заполнить свою таблицу расширений хранилища, используя мой пользовательский развертыватель, и теперь я вижу, что мои записи работают отлично, если пользователь опубликует какую-либо страницу.
Теперь я хочу обработать часть Unpublishing, поэтому я написал undeployer пользовательской страницы, см. Пример кода ниже:
@SuppressWarnings({ "rawtypes" })
public void process(TransportPackage data) throws ProcessingException
{
ProcessorInstructions instructions = data.getProcessorInstructions();
try
{
for (Iterator iterator = instructions.getArguments(); iterator.hasNext(); )
{
Object argument = iterator.next();
if (argument instanceof PageKey)
{
PageKey pageKey = (PageKey)argument;
TCDURI pageMetaURI = new TCDURI(pageKey.getId().getPublicationId(), 1168231104576L, pageKey.getId().getItemId());
PageMeta pageMeta = this.pageMetaHome.findByPrimaryKey(pageMetaURI.getPublicationId(),
(int)pageMetaURI.getItemId());
if (pageMeta == null)
{
DeploymentHandler.undeploy(pageMetaURI);
}
else
{
PublishAction publishAction = new PublishAction();
publishAction.setAction("DEL");
long id = publishAction.getId();
PublishActionDAO publishActionDAO = (PublishActionDAO) StorageManagerFactory.getDefaultDAO("PublishAction");
publishAction = publishActionDAO.findByPrimaryKey(id);
if (publishAction == null)
{
log.debug("FindByPrimaryKey: cannot retrieve object with primary key:" + id);
}
else
{
publishAction = publishActionDAO.update(publishAction);
log.debug("SearchPageUndeployer Updated bean -" + publishAction);
}
}
}
}
}
catch (Exception e)
{
throw new ProcessingException("SearchPageUndeployer: Could not undeploy page", e);
}
super.process(data);
}
В приведенном выше коде вы можете видеть, что я пытаюсь обновить свое новое расширение хранилища "PublishAction", однако, когда я пытаюсь получить идентификатор из таблицы, для записи которой я хочу изменить, я всегда получаю идентификатор как 0, поскольку я не возможность получить идентификатор из таблицы.
Пожалуйста, предложите, что нужно реализовать в моем DAO, чтобы получить идентификатор из таблицы для записи, которую нужно обновить.
Благодарю.
1 ответ
Вы можете создать в своем DAO метод, подобный findByTCMURI
искать ваше действие публикации по странице tcm uri. Код будет примерно таким:
public PublishAction findByTCMURI(String tcmURI) throws StorageException {
StringBuilder queryBuilder = new StringBuilder();
queryBuilder.append("from PublishAction pa where pa.tcmuri = :tcmuri");
Map<String, Object> queryParams = new HashMap<String, Object>();
queryParams.put("tcmuri", tcmURI);
return executeQuerySingleResult(queryBuilder.toString(), queryParams);
}
Должен сделать свое дело. Надеюсь это поможет.