Как отсоединить сущность от персистентного контекста, если использовать Spring Data Repositories (Spring 4)

Мне нужно отсоединить сущность от контекста персистентности в приложении весенней загрузки.

У меня есть следующий базовый репозиторий:

interface EntityRepository extends CrudRepository<Entity, Long> 

Очевидно, что это не предлагает detach(..)-operation. Я нашел ответ, который на самом деле не работает для меня: SO Post.

Я пытался сделать то же самое, но кажется, что моя сущность не отделена (как будто я изменяю любое поле, оно все еще сохраняется)

Пользовательские репо:

interface MyCustomEntityRepository {
  void detach(Entity ent)
}

Интерфейс Impl:

class MyCustomEntityRepositoryImpl implements MyCustomEntityRepository{
     @PersistenceContext
     private EntityManager em;

     public void detach(Entity ent) {
         em.detach(ent);
     }
}

Но я не могу продлить EntityRepository с MyCustomEntityReposity, как это приводит к:

No property detach found for type Entity!Мне удалось собрать его без ошибок, не расширяя EntityRepository. Также изменен CrudRepository в JpaRepositoryНо все-таки моя сущность не отстраняется, а в связном сообщении, QA говорит, что это работает для него / нее. Фактическая причина отсоединения объекта заключается в возможности выполнить некоторые проверки в пределах @EntityListenerпроверяя текущий сохраненный объект в БД, с текущим измененным экземпляром объекта, который должен быть отсоединен.

Кто-нибудь видит какие-то ошибки или подскажет, что я делаю не так?

Использование: Spring-boot(1.4.0-release), Spring 4, JPA

1 ответ

Кто-нибудь видит какие-то ошибки или подскажет, что я делаю не так?

Хотя трудно сказать, что может быть частью вашей реальной проблемы и что такое просто неаккуратное редактирование вопроса.

  1. Ваш интерфейс не компилируется

    interface MyCustomEntityRepository {
       detach(Entity ent)
    }
    

    должно быть

    interface MyCustomEntityRepository {
       void detach(Entity ent)
    }
    
  2. Ваша реализация вашего пользовательского интерфейса должна реализовывать интерфейс:

    class MyCustomEntityRepositoryImpl {
    

    должно быть

    class MyCustomEntityRepositoryImpl implements MyCustomEntityRepository {
    

Если проблемы сохраняются, пожалуйста, покажите фактический код, который вы используете, с фактическим исключением, включая трассировку стека.

Другие вопросы по тегам