2011-02-01 4 views
0

im пытается узнать некоторые jsp, а также весной рамки.настроить много-к-одному отношение весна mvc

Мое приложение имеет 2 квадратных стола. «Пользователь» и «Местоположения»

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

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

---- редактировать: На контроллере:

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 (пользователь) возвращает список местоположений с тем же идентификатором, что и пользователь.

+0

Я бы не назвал это обычным решением, вам нужно будет только получить пользователей, и списки местоположений должны быть автоматически заполнены (если вы используете нетерпеливую выборку или запрос, из-за чего lazy-отношения будут извлечены). Я все же предлагаю искать более подробные учебники по этому предмету через поисковые системы, должно быть много плавающих вокруг. Я бы поискал для тебя кое-что, но, к сожалению, сейчас мне нужно отправиться на работу. – esaj

+0

спасибо, я верю, что добавил, что до того, как я прочитал ваш оригинальный ответ. – jwheels

+0

esaj, если у вас есть второй, вы можете порекомендовать учебник/некоторую информацию? я начинаю немного перегружаться. – jwheels

ответ

1

Мое приложение имеет 2 квадратных стола. «Пользователь» и «Местоположения»

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

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

@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; 
    } 
} 

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

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

+0

спасибо за совет. Я надеялся на решение с использованием подхода user1.getLocations(). – jwheels

2

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

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

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

+0

в порядке. im с вами до сих пор. – jwheels

+0

Хорошо ... дайте нам знать, если у вас есть еще вопросы. – CoolBeans

+0

Карта myModel = new HashMap (); Список users = userManager.getUsers(); // КОДИРОВАТЬ СЛЕДУЮЩИЙ СПИСОК ЛОКАЦИЙ С ПОЛЬЗОВАТЕЛЕМ myModel.put («пользователи», пользователи); вернуть новый ModelAndView («местоположение», «модель», myModel); } в разделе комментариев, как бы добавить местоположения (полученные с помощью userService.getLocations (userid)) в модель таким образом, чтобы я мог определить, к какому пользователю они принадлежат на странице jsp. в идеале, я пытаюсь использовать вложенные forEach циклы для отображения каждого пользователя и их местоположений. – jwheels