【问题标题】:Spring Data JPA: persist a nested objectSpring Data JPA:持久化嵌套对象
【发布时间】:2015-02-18 16:05:23
【问题描述】:
我有一个 USER(id, role_id, first, last) 对象,其中包含一个 ROLE(id, role_name) 对象。数据库中预定义了ROLE,数据如下:0,用户; 1、管理员; 3 超级管理员...持久(保存)用户并根据角色名称将角色ID添加到用户的最佳方法是什么?创建用户时,我知道角色名称,但不知道角色 ID。我是否需要先查询角色 ID,然后将其添加到 USER 对象?我确信在 Spring Data JPA 中有更聪明的方法。请帮忙,谢谢。
【问题讨论】:
标签:
java
spring
hibernate
jpa
spring-data-jpa
【解决方案1】:
您确实配置了存储库,对吗?
假设您有RoleRepository extends JpaRepository<Role, Long> 接口,您可以定义方法Role findByRoleName(String roleName) 并获取Role 对象,将其附加到新创建的User 对象并通过用户存储库保留该用户。
当然,你必须在User 类中有有效的关系,比如说@OneToMany(cascade=ALL, mappedBy="user") private Set<Role> roles。
cascade 注释属性当然是可配置的。
更好的是,如果您在应用程序启动时将所有角色加载到内存中,因为您已经预定义了它们,将它们存储到 Map 并在需要时从映射中获取。