установить отношения многие-к-одному весной mvc - PullRequest
0 голосов
/ 01 февраля 2011

Я пытаюсь изучить некоторые JSP, а также Spring Framework.

Мое приложение имеет 2 таблицы SQL.«Пользователь» и «Локации»

каждая Локация принадлежит Пользователю.Таблица местоположений имеет внешний ключ, ссылающийся на идентификатор пользователя.

Я хочу реализовать свое приложение так, чтобы для данного пользователя (то есть 'user1') я мог вызвать user1.getLocations (), чтобы получить список местоположений, связанных с этим пользователем, но я не знаю, гдереализовать это.(в классе User, на UserDao, на UserManager, на контроллере для страницы, на которой должны быть перечислены все пользователи и их и т. д.?) ??

---- edit: на контроллере:

    List<User> users = userManager.getUsers();  
    for(User user:users) {
        user.setLocations(locationManager.getLocations(user));
    }

    myModel.put("users", users);
    return new ModelAndView("location", "model", myModel);
}

это обычное решение?locationManager.getLocations (пользователь) возвращает список местоположений с тем же идентификатором, что и у пользователя.

Ответы [ 2 ]

2 голосов
/ 01 февраля 2011

Скорее всего, в классе UserDao , поскольку это звучит как операция с БД.Также метод должен быть больше похож на эту сигнатуру userService.getLocations (userId) в отличие от user1.getLocation (), user2.getLocation (). и т. Д.

Вы можете получить краткий обзор шаблона MVC , узнать больше о Spring MVC и tuotrial .

Вам определенно понадобитсясвязать ваши вызовы методов с дао из представления.Традиционно это делается следующим образом: запрос из представления (V в MVC) -> диспетчерские диспетчеры (C в MVC) -> класс обслуживания (часть M в MVC) -> класс dao (также часть M в MVC) иотправлено обратно для просмотра, перелистывая направления.

1 голос
/ 01 февраля 2011

Мое приложение имеет 2 таблицы sql. «Пользователь» и «Местоположение»

каждое место принадлежит пользователю. таблица местоположений имеет внешний ключ ссылаясь на идентификатор пользователя. Я хочу реализовать свое приложение таким образом, чтобы с учетом пользователя (т.е. «user1») я мог позвонить user1.getLocations (), чтобы получить список местоположений, связанных с этим пользователем , но я не знаю, где это реализовать.

Я бы не стал создавать отдельный DAO-метод для обработки этого, «user1.getLocations» - правильный подход. Hibernate и соавт. поддерживать такие вещи, как отложенная загрузка и отображение табличных отношений как коллекций (таких как списки и наборы) между сущностями, которые предназначены для подобных ситуаций. Вот простой пример, который может не работать "из коробки", в зависимости от того, как названы ваши таблицы и т. Д., Но вы поймете:

@Entity
public class User
{
    @OneToMany(mappedBy="user")
    private List<Location> locations;

    public List<Location> getLocations()
    {           
        return locations;
    }
}

@Entity
public class Location
{
    @ManyToOne
    @PrimaryKeyJoinColumn
    private User user;

    public User getUser()
    {
        return user;
    }
}

Обратите внимание, что вы можете получить местоположения со стороны пользователя, даже если отношение в базе данных только от местоположения к пользователю (атрибут «mappedBy» в @OneToMany пользователей фактически указывает, какое поле находится на «другой стороне»). ссылки "(Местоположение) указывает на этого пользователя).

Я бы посоветовал поискать JPA и / или Hibernate с учебниками Spring для получения более подробной информации.

...