hibernate - JPA 存储库与实体职责

标签 hibernate jpa orm repository-pattern

我刚刚进入 JPA 的世界,对我来说似乎有点困惑的一件事是存储库类的责任与实体类的责任。

例如,如果我在两个实体之间定义了关联,添加/删除子对象是否应该发生在父级的存储库或实体类中?

另外,保存是否应该由服务中的 entityManager.persist 方法调用处理,还是应该在存储库类中使用自定义保存方法?

谢谢!

最佳答案

注:以下示例摘自 Spring Data JPA documentation .

  • Entity是您的域对象,其中 经常 对应表中的一行。我说经常是因为一个Entity可以是一行的一部分,也可以是来自多个表的行连接在一起。在关系数据库的上下文中,Entity对应一个关系。下面是一个例子:
    @Entity
    public class User {
    
      @Id
      @GeneratedValue
      Long id;
    
      String lastname;
    
      ... // Other fields, such as the user role, as well as getters and setters
    }
    
  • 一个 Repository是一个在 上提供基本 CRUD 操作的对象一 Entity .下面是一个例子:
    public interface UserRepository extends JpaRepository<User,Long> {
    
      @Query("select u from #{#entityName} u where u.lastname = ?1")
      List<User> findByLastname(String lastname);
    }
    
  • 一个 Service是对一个或多个 Repository 进行操作的对象对象,提供特定于应用程序的逻辑,并解决诸如事务管理之类的横切关注点。下面是一个例子:
    @Service
    class UserManagementImpl implements UserManagement {
    
      private final UserRepository userRepository;
      private final RoleRepository roleRepository;
    
      @Autowired
      public UserManagementImpl(UserRepository userRepository,
        RoleRepository roleRepository) {
        this.userRepository = userRepository;
        this.roleRepository = roleRepository;
      }
    
      @Transactional
      public void addRoleToAllUsers(String roleName) {
    
        Role role = roleRepository.findByName(roleName);
    
        for (User user : userRepository.findAll()) {
          user.addRole(role);
          userRepository.save(user);
        }
    }
    
  • 关于hibernate - JPA 存储库与实体职责,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25203564/

    相关文章:

    Javascript 查询或 ORM

    java - 未找到当前线程 : Spring 3 and Hibernate 4 (Using @PostConstruct annotation) 的 session

    spring - Bean 属性 'sessionFactory' 不可写或具有无效的设置方法。

    java - MVC Web 应用程序如何在 Java 中工作?

    hibernate - 如何在 hibernate 标准中订购 oneToMany 连接表

    java - JPA native 查询与 'pure' JPA 持久性

    orm - CF9 中用于持久性 CFC 的 New/CreateObject() 与 EntityNew() 之间的区别?

    java - Hibernate/JPA DB 模式生成最佳实践

    java - Hibernate - 映射同一列的两个字段的不同值

    php - 使用单表继承构建表单