java - Spring Hibernate - CrudRepository 和 SessionFactory 之间的区别

标签 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 的注释子类/接口(interface):

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

此外,有时我会看到 @Repository 注释,而不是 @Transactional。有什么区别?

我还没有找到“我什么时候/应该使用前一种或后一种方法”的答案,所以我能得到解释吗?

最佳答案

您只能在 Spring 文档站点上找到这些注释的描述。

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

  • @Transactional用于划定事务涉及的代码。它位于类和方法上。

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

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

关于java - Spring Hibernate - CrudRepository 和 SessionFactory 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36234206/

相关文章:

java - java中的动态类加载

java - 在Spring中将包含json属性的实体保存到ElasticSearch

java - Hibernate 一对一映射。仅插入外键而不是整个新行

java - 持久对象异常 : detached entity passed to persist

java - Hibernate 5 给出错误 : must have same number of columns as the referenced primary key

java - Apache Camel Milo 客户端超时

java - 倒计时器

java - 如何使用 AJAX 使两个 JSF selectOneMenu 相互依赖?

java - Spring 数据: @Transactional and propogation

java - swagger-ui.html 停止出现