У меня есть веб-приложение на Java, использующее Spring MVC / Hibernate и MS SQL.В настоящее время пользователи могут проходить аутентификацию через свой LDAP-вход, однако мне нужны специальные страницы, на которых пользователь может просматривать только свой список задач (которые извлекаются из MS SQL). Это может показаться довольно простым, но на самом деле я впервые делаю это с помощью Spring иHibernate, поэтому я немного потерян!Также я смотрю на один и тот же код в течение нескольких дней и могу использовать некоторую помощь :)
Я использую Bootgrid для отображения их списка задач, относящихся к их идентификатору пользователя в MS SQL (база данных уже заполнена образцомданные), однако мне трудно пройти через UserId в выражении HQL или, по крайней мере, пытаюсь получить данные, которые относятся исключительно к этому конкретному пользователю.
Это код из моего файла sampleDataService.java:
/**
* Get a List of active tasks
* @param searchPhrase a search phrase for the query
* @param orderBy an order by phrase
* @return List of {@link Case}
*/
@Transactional(readOnly = true)
public List<Inv> getMyTasks(String searchPhrase, String orderBy) {
return hibernateDAO.getMyTasks(searchPhrase, orderBy);
}
Это код для моего файла sampleHibernateDAO.java:
/**
* Get a List of active tasks
* @param searchPhrase a search phrase for the query
* @param orderBy an order by phrase
* @return List of {@link task}
*/
@SuppressWarnings("unchecked")
public List<ex> getMyTasks(String searchPhrase, String orderBy) {
if (searchPhrase == null) {
searchPhrase = "";
}
if (orderBy == null) {
orderBy = "";
}
String HQL = "from ex i where exists (from exUser u where userId = :userId and u.userId = i.userId)"
+ searchPhrase + orderBy;
logger.debug("getMyTasks HQL=" + HQL);
List<ex> list = sessionFactory.getCurrentSession()
.createQuery(HQL)
//.setParameter("userId", LoginBean.getRemoteUser(userId), IntegerType.INSTANCE)
.list();
if (list == null) {
list = new ArrayList<Inv>();
}
return list;
}
И это частьмоего кода в файле sampleController.java для этой конкретной вещи, которую я пытаюсь сделать:
@GetMapping(value = "/svc/sampleUser/{userId}", produces = { MediaType.APPLICATION_JSON_VALUE })
@ResponseBody
public Inv getMyTasksData(@PathVariable("userId") int userId, HttpServletRequest request) {
LoginBean login = LoginBean.getLoginBean(request);
ex example = dataService.getExampleByUserId(userId);
if (login.isUserInRole("AdminUser")) {
investigation.setUserId(login.getUserId());
investigation.setEmployerId(login.getManager());
}
if (example == null) {
example = new ex();
}
return example;
}
/**
* Web service to produce a JSON data response to a query for
* the list of scheduled tasks
* @return an JSON data containing a List of task records
*/
@PostMapping(value = "/svc/sampleUser/myTasks", produces = { MediaType.APPLICATION_JSON_VALUE })
@ResponseBody
public BootGridControl getMyTasks(HttpServletRequest request) {
MyTasksGridControl grid = new MyTasksGridControl(request);
LoginBean login = LoginBean.getLoginBean(request);
if (login.isUserInRole("AdminUser", "SysAdmin")) {
List<ex> rows = dataService.getMyTasks(grid.getSearchPhrase(), grid.getOrderBy());
grid.setRows(rows);
grid.setTotal(rows.size());
}
return grid;
}
}
(мне пришлось заменить реальные имена переменных / методов по соображениям конфиденциальностиПоэтому, если вы обнаружите несоответствия в именах переменных, извините. Мне просто нужно руководство по логике и, если возможно, рабочий пример того, чего я пытаюсь достичь. Пожалуйста, дайте мне знать, если мне нужно предоставить больше информации - любую помощьс благодарностью!
Также созданы все соответствующие классы DTO / Beans / Model и все другие компоненты этого приложения работают. Я просто не могу получить текущего зарегистрированного пользователя для проверки по столбцу базы данных MS SQL, чтобы увидетьесли их имя пользователя совпадает с userId.
RIght сейчас в bootgrid, я не получаю никаких результатов, и это, скорее всего, из-за полного получения userIdСью.Так что либо мое утверждение HQL неверно, либо все мое направление / подход отключены.