Spring Hibernate - CrudRepository和SessionFactory之间的区别

时间:2016-03-26 10:27:26

标签: java spring hibernate

我正在研究使用Hibernate持久化我的模型。我似乎找到了两种方法来做到这一点。

第一个使用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 个答案:

答案 0 :(得分:3)

仅您可以在Spring docs网站上找到这些注释的说明。

很快,为了回答您的问题,它们之间的区别在于它们用于不同的目的。

  • @Transactional用于划分涉及事务的代码。它放在课程和方法上。

  • @Repository用于定义支持事务的Spring bean,也可以在DI中使用。

它们可以在同一个类中使用。