gpt4 book ai didi

hibernate - JPA 存储库与实体职责

转载 作者:行者123 更新时间:2023-12-04 22:20:25 24 4
gpt4 key购买 nike

我刚刚进入 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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com