Я бы хотел, чтобы роли устанавливались лениво.Hibernate fetchType.Lazy не работает в тех случаях, когда используются данные Spring.Я пробовал много возможностей, таких как Entitygraph, но ни одна из них не работает на этом, или я использую их неправильно.У меня есть следующие классы:
Класс пользователя:
@Entity
@JsonRootName(value = "user")
@Table(name = "web_users", schema = "t_dw_comercial")
public class User {
@Id
private int userId;
private String fullName;
@OneToMany(fetch=FetchType.LAZY)
@JoinTable(name="web_users_roles",
joinColumns = {@JoinColumn(name="user_id")},
inverseJoinColumns = {@JoinColumn(name="role_id")}
)
private List<Role> roles;
}
Роль класса:
@Entity
@JsonRootName(value = "roles")
@Table(name = "web_roles", schema = "t_dw_comercial")
public class Role {
@Id
private int roleId;
private String roleName;
}
Служба:
@Service
public class UserService implements IUserService{
@Autowired
UserRepository repository;
public User findUserByLdapId(String loginName) {
return repository.findUserByLdapId(loginName);
}
}
Репозиторий:
@Repository
public interface UserRepository extends CrudRepository<User, Long>{
@Query("SELECT u FROM User u where u.ldapId= ?1")
public User findUserByLdapId(String loginName);
}
Контроллер:
@Controller
@RestController
public class UserController {
@Autowired
private IUserService userService;
@CrossOrigin
@RequestMapping(value = "/dashboard", params = {"user"}, method = RequestMethod.GET, produces = "application/json")
public ResponseEntity<User> getUser(@RequestParam(value = "user") String ldapId) {
User user = userService.findUserByLdapId(ldapId);
if(user == null)
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
return new ResponseEntity<>(user, HttpStatus.OK);
};
}
Так что json будет выглядеть так:
{
"user": {
"userId": 1,
"fullName": "Carolina Ponce",
"roles":[]
}
}
Заранее спасибо!