建立一个多对一的关系spring mvc

时间:2011-02-01 05:22:20

标签: java spring jsp spring-mvc dao

我试图学习一些jsp以及spring框架。

我的应用程序有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)返回与用户ID相同的Locations List。

2 个答案:

答案 0 :(得分:2)

很可能在 UserDao 类中,因为它听起来像是数据库操作。此方法应该更像是这个签名 userService.getLocations(userId),而不是 user1.getLocation(),user2.getLocation()。等。

您可以快速了解MVC pattern,详细了解Spring MVCtuotrial

您肯定需要从视图中将方法调用链接到dao。传统上它是这样做的:来自视图的请求(MVC中的V) - &gt;控制器调度(MVC中的C) - &gt;服务类(MVC中M的一部分) - &gt; dao类(也是M in的一部分) MVC)并通过翻转方向发送回视图。

答案 1 :(得分:1)

  

我的应用程序有2个sql表。   '用户'和'地点'

     

每个位置属于一个用户。该   location表有一个外键   引用用户的id。   我想实现我的应用程序,以便给予用户(即'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;
    }
}

请注意,您可以从用户端获取位置,即使数据库中的关系仅来自位置到用户(用户'@OneToMany中的“mappedBy”属性实际上告诉“另一方”中的哪个字段引用“(位置)指向此用户。”

我建议使用Spring教程查找一些JPA和/或Hibernate,以获得更深入的信息。