2016-03-26 6 views
2

Я ищу в своей модели, использующей Hibernate. Кажется, я нахожу два подхода для этого.Spring Hibernate - разница между CrudRepository и SessionFactory

Первый из них использует SessionFactory, например:

public Collection loadProductsByCategory(String category) { 
     return this.sessionFactory.getCurrentSession() 
       .createQuery("from test.Product product where product.category=?") 
       .setParameter(0, category) 
       .list(); 
    } 

Другой использует аннотированный подкласс/интерфейс простирающуюся CrudRepository:

@Transactional 
public interface UserDao extends CrudRepository<User, Long> { 
    public User findByEmail(String email); 
} 

Кроме того, вместо @Transactional иногда я увидеть @Repository аннотацию , В чем разница?

Я не нашел ответа на вопрос «когда я должен использовать предыдущий или последний подход», так что я могу получить объяснение?

+1

['SessionFactory'] (https://docs.jboss.org/hibernate/orm/5.0/javadocs/org/hibernate/SessionFactory.html), [' CrudRepository'] (http: //docs.spring. io/spring-data/commons/docs/current/api/org/springframework/data/repository/CrudRepository.html), ['@ Transactional'] (http://docs.spring.io/spring/docs/current/ javadoc-api/org/springframework/transaction/annotation/Transactional.html), ['@ Repository'] (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/stereotype/ Repository.html). –

ответ

3

Просто вы можете найти описание этих аннотаций на сайте docs Spring.

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

  • @Transactional Используется для демаркации кода, участвующего в транзакции. Он помещается на классы и методы.

  • @Repository используется для определения весеннего компонента, поддерживающего транзакции, его также можно использовать в DI.

Их можно использовать как в одном классе.

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