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