Как реализовать «удалить все» для объекта Spring Roo? - PullRequest
3 голосов
/ 14 апреля 2011

Я пытаюсь удалить все записи базы данных для сущности Spring Roo.Когда я смотрю на *_Roo_Entity.aj, кажется, что не существует метода «удалить все».Я попытался реализовать это сам (Licences - это имя сущности Roo. Не обращайте внимания на наименование. Оно было получено из базы данных и может быть изменено позже):

public static int Licences.deleteAll() {
    return entityManager().createQuery("delete from Licences o").executeUpdate();
}

Компилируетсяпросто отлично, но когда я звоню Licences.deleteAll(), я получаю следующее исключение:

org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; 
nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query (NativeException)

Добавление @Transactional не имеет значения.

Что мне здесь не хватает?

Является ли этот подход совершенно неправильным, и мне нужно реализовать его следующим образом:

    public static void Licences.deleteAll() {
        for (Licences licence : findAllLicenceses()) {
            licence.remove();
        }
    }

Это работает, но достаточно JPA, чтобы перевести его в запрос delete from licences или создастn запросов?

Ответы [ 3 ]

6 голосов
/ 21 июня 2011

@ Транзакционный не работает на статической функции

изменить

public static int Licences.deleteAll() {
    return entityManager().createQuery("delete from Licences o").executeUpdate();
}

на

public int Licences.deleteAll() {
    return entityManager().createQuery("delete from Licences o").executeUpdate();
}

https://jira.springsource.org/browse/SPR-5999

Пока

2 голосов
/ 09 ноября 2011
public static int Licences.deleteAll() {
    return new Licences().deleteAllTransactional();
}

@Transactional
private int Licences.deleteAllTransactional() {
    if (this.entityManager == null) this.entityManager = entityManager();
    return this.entityManager.createQuery("delete from Licences o").executeUpdate();
}
2 голосов
/ 14 апреля 2011

JPA не имеет удаления всех функций. (даже не с JQL!)

По крайней мере, есть только три способа:

Кстати: он показывает, что вы используете AspectJ для подключенияВы удаляете метод.- Вы можете сделать это (даже если я не знаю, почему бы не добавить статический метод непосредственно в класс Entity), но вы не должны касаться сгенерированных Roo aj-файлов!

...