2016-10-13 14 views
0

Мне нужно отделить объект от контекста персистентности в приложении весенней загрузки.Как отделить объект от контекста персистентности, если использовать Spring Data Repositories (Spring 4)

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

interface EntityRepository extends CrudRepository<Entity, Long> 

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

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

Выборочная Repo:

interface MyCustomEntityRepository { 
    void detach(Entity ent) 
} 

Интерфейс осущ:

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, проверив текущий хранимый объект в db с измененным экземпляром объекта, который должен быть удален.

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

Использование: Весна-загрузки (1.4.0-релиз), Весна 4, JPA

+0

Это одноразовое требование или вы хотите, чтобы это средство для всех объектов в вашем приложении? – manish

+0

Мне нужно это только для одного объекта, но он тоже будет интересоваться общим подходом – lunatikz

+0

Если это только для одного объекта, просто autowire 'EntityManager' как' @PersistenceContext EntityManager entityManager; ', где вы автоматически создаете репозиторий, а затем вы может отделить экземпляры сущности как 'entityManager.detach (entity)'. Это не требует какого-либо пользовательского кодирования, так это легко. Если это требуется для всех объектов, см. [Официальная документация] (http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.custom-behaviour-for-all- репозитории) по пользовательскому поведению для репозиториев JPA. Вы можете расширить 'CrudRepository', чтобы включить метод' detach' в репозиторий. – manish

ответ

1

ли кто-нибудь увидеть некоторые ошибки или дать мне ключ, что им делать неправильно?

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

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

    interface MyCustomEntityRepository { 
        detach(Entity ent) 
    } 
    

    , вероятно, следует

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

    class MyCustomEntityRepositoryImpl { 
    

    , вероятно, следует

    class MyCustomEntityRepositoryImpl implements MyCustomEntityRepository { 
    

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

+0

Извините за поздний ответ. Да, ошибки в коде произошли из-за неаккуратного редактирования вопроса. Я мог бы решить это, не используя вообще отсоединение, вместо этого я анализирую модификации на другом экземпляре объекта и могу выполнять проверки на двух отдельных экземплярах сущностей. Я попробую его снова через несколько дней, чтобы добиться того же самого с слушателем сущностей и отсоединением, поскольку я заинтересован в нем для себя. Тогда я отвечу. Извините за задержку – lunatikz

 Смежные вопросы

  • Нет связанных вопросов^_^