【问题标题】:Many to one. How to associate one object with another?多对一。如何将一个对象与另一个对象关联?
【发布时间】:2017-02-14 20:52:40
【问题描述】:

我有 2 个实体用户和文章

用户

@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue
    @Column(name="user_id")
    private Integer id;

    @Column(name="name")
    private String name;

    @OneToMany(mappedBy = "userId")
    private List<Article> articles;

文章

@Entity
@Table(name = "article")
public class Article {
    @Id
    @GeneratedValue
    private Integer articleId;

    private String name;

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User userId;

我可以注册一个用户,然后转到他的页面,然后从那里转到具有提交文章表单的页面。

<form:form method="POST" modelAttribute="article"
        action="${pageContext.request.contextPath}/addArticle">
        <table>
            <tbody>
                <tr>
                    <td>Title:</td>
                    <td><form:input path="name"></form:input></td>
                </tr>
                <tr>
                    <td>Author id:</td>
                    <td><form:input path="userId"></form:input></td> 
                </tr>
<%--                <form:input type="text" path="userId" disabled="true"/> --%>
<%--                    <form:input type="hidden" path="id" id="id"/> --%>
                <tr>
                    <td><input value="Add" type="submit"></td>
                    <td></td>
                </tr>
            </tbody>
        </table>
    </form:form>

问题是,我不知道如何将文章与该用户关联。现在我的 ArticleController 看起来像这样

文章控制器

@Controller
public class ArticleController {

    @Autowired
    private ArticleService articleService;

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/addArticle/{id}", method = RequestMethod.GET)
    public String addArticle(@PathVariable Integer id, Model model){
        User user = userService.getUserById(id);
        Article article = new Article();
        model.addAttribute("user", user);
        model.addAttribute("article", article);
        return "addArticle";
    }

    @RequestMapping(value = "/addArticle", method = RequestMethod.POST)
    public ModelAndView addArticle(@ModelAttribute Article article) {

        ModelAndView mav = new ModelAndView();
        articleService.addArticle(article);
        mav.setViewName("redirect:/success");
        return mav;
    }
}

我是怎么做到的

<form:input path="userId" disabled="true"></form:input>

会保存用户ID的值吗?我什至需要向那里传递一个 id 还是必须是一个用户对象?

在这种方法中我必须改变什么?

public ModelAndView addArticle

我用的是mysql和spring data jpa

【问题讨论】:

标签: spring forms jsp spring-mvc spring-data-jpa


【解决方案1】:

我会删除path="userId",因为您只输入 id 而不会传递实际对象并将其替换为名称

<form:input name="userId"></form:input>

然后您可以将HttpServletRequest request 作为附加参数添加到您的 addArticle 类中

 public ModelAndView addArticle(HttpServletRequest request, @ModelAttribute Article article) {

这应该允许您从表单访问用户 ID 并检索用户

User user = userService.getUserById(id);

然后你必须设置用户

Article article = new Article();
article.setUser(user)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 2021-07-14
    • 2014-03-27
    相关资源
    最近更新 更多