2011-02-01 3 views
0

메신저뿐만 아니라 봄 프레임 워크를 배우려고 메신저.many-to-one 관계 스프링 mvc를 설정하십시오

내 응용 프로그램에는 2 개의 SQL 테이블이 있습니다. '사용자'및 '위치'

각 위치는 사용자에 속합니다. 위치 테이블에는 사용자의 ID를 참조하는 외부 키가 있습니다.

주어진 사용자 (예 : 'user1')에서 해당 사용자와 연결된 위치 목록을 검색하기 위해 user1.getLocations()를 호출 할 수 있지만이 위치를 구현할 위치를 알 수 없도록 구현하고 싶습니다. . (User 클래스, 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 (user)는 user와 같은 id를 가진 Locations의 List를 반환합니다.

+0

나는 기존의 솔루션이라고 부르지 않을 것이다. 사용자를 얻는 것만으로도 충분하다. eager-fetching이나 lazy-relation을 가져 오도록 강제하는 쿼리를 사용한다면, 자동으로 위치 목록을 채워야한다. 나는 여전히 검색 엔진을 통해 주제에 대한 심층적 인 튜토리얼을 찾고자 할 것이 권장된다. 나는 너를 위해 몇 가지를 찾아 볼 것이지만, 불행히도 지금 나는 일하러 가야한다. – esaj

+0

감사합니다. 나는 원래 대답을 읽기 전에 그것을 추가했다고 생각합니다. – jwheels

+0

esaj, 잠시 시간이 있다면 튜토리얼/몇 가지 정보를 권할 수 있습니까? 조금 압도되기 시작한 메신저. – jwheels

답변

1

내 응용 프로그램에는 2 개의 SQL 테이블이 있습니다. '사용자'및 '위치'

각 위치는 사용자에 속합니다. 위치 테이블에는 사용자의 ID를 참조하는 외래 키 이 있습니다. 주어진 사용자 (즉 'user1')에게 user1.getLocations()를 호출하여 해당 사용자와 연결된 위치 목록을 검색 할 수 있도록 응용 프로그램을 구현하려는 경우 ,하지만이 위치를 구현할 위치를 모르겠습니다.

"user1.getLocations"가 올바른 접근 방식인데이를 처리하기 위해 별도의 DAO 방법을 만들지 않겠습니다. Hibernate et al. lazy-loading과 같은 테이블 관계의 매핑과 같은 것들을 지원한다.

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

참고가의 위치를 ​​얻을 수 있습니다 : 여기에 아웃 -의 - 상자 당신의 테이블 등의 이름을 지정하는 방법에 따라 작동하지 않을 수 있습니다,하지만 당신은 아이디어를 얻을 수 있습니다하는 간단한 예제 사용자 측 (데이터베이스의 관계가 위치에서 사용자까지만 있음에도 불구하고 "Users의 @ mappedTo"속성은 실제로 "참조 상대방"(Location)의 어느 필드가이 사용자를 가리키는 지 알려줍니다) .

좀 더 심층적 인 정보를 원한다면 JPA 및/또는 Hibernate with Spring 튜토리얼을 찾아 보길 권한다.

+0

조언을 주셔서 감사합니다. 나는 user1.getLocations() 접근법으로 솔루션을 기대했다. – jwheels

2

DB 작업처럼 들릴 수 있으므로 UserDao 클래스에있을 가능성이 큽니다. 또한이 메서드는 userService.getLocation (userId)user1.getLocation(), user2.getLocation()와 반대가되어야합니다.

MVC pattern에 대한 간단한 개요와 Spring MVCtuotrial에 대해 자세히 알아볼 수 있습니다.

뷰에서 dao에 메서드 호출을 연결해야합니다. 따라서 전통적으로 MVC에서 V -> 컨트롤러 디스패치 (MVC에서 C) -> 서비스 클래스 (MVC에서는 M의 일부) -> dao 클래스 (MVC에서는 M의 일부 임) 길 찾기를 뒤집어서 보냈다.

+0

괜찮습니다. 너와 지금까지 메신저. – jwheels

+0

오케이. 궁금한 점이 더 있으면 알려주세요. – CoolBeans

+0

지도 myModel = 새 HashMap (); 목록 users = userManager.getUsers(); // 위치를 사용자와 연결하는 방법에 대한 코드 myModel.put ("users", users); return new ModelAndView ("location", "model", myModel); } 주석 처리 된 섹션에서 어떻게 jsp 페이지에 속한 사용자인지 알 수있는 방법으로 모델에 userService.getLocations (userid)를 사용하여 얻은 위치)를 추가 할 수 있습니다. 이상적으로는 중첩 된 forEach 루프를 사용하여 각 사용자와 해당 위치를 표시하려고합니다. – jwheels

관련 문제