【问题标题】:set up a many-to-one relationship spring mvc建立多对一关系spring mvc
【发布时间】:2011-06-19 01:19:34
【问题描述】:

我正在尝试学习一些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 相同的位置列表。

【问题讨论】:

  • 我不会称其为传统解决方案,您应该只需要获取用户并且应该自动填充位置列表(如果使用渴望获取或强制延迟关系的查询被提取)。我仍然建议通过搜索引擎寻找有关该主题的更深入的教程,应该有很多浮动。我会为你查一些,但不幸的是我现在得去上班了。
  • 谢谢,我相信我在阅读您的原始答案之前添加了这一点。
  • esaj,如果你有时间,你能推荐一个教程/一些信息吗?我开始有点不知所措了。

标签: java spring jsp spring-mvc dao


【解决方案1】:

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

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

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

【讨论】:

  • 好的......如果您还有其他问题,请告诉我们。
  • Map myModel = new HashMap();列表 用户 = userManager.getUsers(); //代码以某种方式与用户关联位置列表 myModel.put("users", users); return new ModelAndView("location", "model", myModel);在评论部分中,我将如何将位置(使用 userService.getLocations(userid) 获得)添加到模型中,以便我可以在 jsp 页面上知道它们属于哪个用户。理想情况下,我尝试使用嵌套的 forEach 循环来显示每个用户及其位置
  • 您将通过 myModel 发送它,然后使用 jstl 循环遍历这些位置。事实上,位置应该是 User 类中的一个字段。
【解决方案2】:

我的应用程序有 2 个 sql 表。 “用户”和“位置”

每个位置都属于一个用户。这 位置表有一个外键 引用用户的id。 我想实现我的应用程序,以便给定一个用户(即'user1')我可以调用 user1.getLocations() 检索与该用户关联的位置列表 ,但我不知道在哪里实现。

我不会创建一个单独的 DAO 方法来处理这个问题,“user1.getLocations”是正确的方法。休眠等。支持诸如延迟加载和将表关系映射为实体之间的集合(如列表和集合)之类的东西,这适用于这些情况。这是一个简单的示例,它可能无法开箱即用,具体取决于您的表的命名方式等,但您会明白的:

@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”属性实际上告诉“另一端”的哪个字段参考”(位置)指向此用户)。

我建议查找一些 JPA 和/或 Hibernate with Spring -tutorials 以获得更深入的信息。

【讨论】:

  • 感谢您的建议。我希望通过 user1.getLocations() 方法找到解决方案。
猜你喜欢
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
相关资源
最近更新 更多