bugfix> java > 投稿

私はあなたの助けを必要とする問題に取り組んできました。

@コントローラ パブリッククラスJokeController {

@Autowired
JokeRepository jokeRepository;
CategoryRepository categoryRepository;
public Category dark_humor = new Category("Dark Humor");
public Category sports_and_athletes = new Category("Sports And Athletes");
@GetMapping("/new")
public String jokeForm(Model model) {
    model.addAttribute("joke", new Joke());
    return "jokeForm"; // jokeForm.html
}
@PostMapping("/new")
public String jokeSubmit(@ModelAttribute Joke joke) {
    //joke.setCategory(dark_humor);
    jokeRepository.save(joke);
    return "redirect:/new";
    //return "resultJoke"; // resultCategory.html
}

}

私のエンティティ:

関係では、カテゴリには多くのジョークを含めることができますが、ジョークは1つのカテゴリにのみ属することができます。

カテゴリー @エンティティ パブリッククラスカテゴリ{

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@Column(name = "name")
private String name;
public Category() {
}
public Category(String name) {
    this.name = name;
}
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
@Override
public String toString() {
    return "Category{" +
            "id=" + id +
            ", name='" + name + '\'' +
            '}';
}

}

冗談で

@エンティティ パブリッククラスのジョーク{

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int joke_id;
@Column(name = "likes")
@Value("${some.key:0}")
private int likes;
@Column(name = "dislikes")
@Value("${some.key:0}")
private int dislikes;
@Column(name = "content")
@NotNull
private String content;
@ManyToOne(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
@NotNull
@JoinColumn(name = "category_id")
private Category category;
public Joke() {
}
public Joke(@NotNull String content, @NotNull Category category) {
    this.content = content;
    this.category = category;
}
public int getJoke_id() {
    return joke_id;
}
public void setJoke_id(int joke_id) {
    this.joke_id = joke_id;
}
public int getLikes() {
    return likes;
}
public void setLikes(int likes) {
    this.likes = likes;
}
public int getDislikes() {
    return dislikes;
}
public void setDislikes(int dislikes) {
    this.dislikes = dislikes;
}
public String getContent() {
    return content;
}
public void setContent(String content) {
    this.content = content;
}
public Category getCategory() {
    return category;
}
public void setCategory(Category category) {
    this.category = category;
}
@Override
public String toString() {
    return "Joke{" +
            "joke_id=" + joke_id +
            ", likes=" + likes +
            ", dislikes=" + dislikes +
            ", content='" + content + '\'' +
            ", category=" + category +
            '}';
}

}

私のタイムリーフ:

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Getting Started: Handling Form Submission</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>Form</h1>
<form action="#" th:action="@{/new}" th:object="${joke}" method="post">
    <p>Content: <input type="text" th:field="*{content}" /></p>
    <p>Category: <input type="text" th:field="*{category}" /></p>
    <p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</form>
</body>
</html>
*Specifically in this section:*
@PostMapping("/new")
    public String jokeSubmit(@ModelAttribute Joke joke) {
        //joke.setCategory(dark_humor);
        jokeRepository.save(joke);
        return "redirect:/new";
        //return "resultJoke"; // resultCategory.html
    }

Hibernateで新しいジョークを保存したい既存の カテゴリー。しかし、私は私のフォームですべてをロードする方法がわかりません既存の カテゴリとPostメソッドでそれを使用して、フォームで明示的に選択したカテゴリのジョークを送信する方法。私はまだ取り上げていない重要な側面を見逃していると思います。

回答 1 件
  • 最初のステップは、コントローラーでカテゴリーをハードコード設定して、正しく保存されるようにすることです。また、ジョークを保存することでカテゴリのプロパティを変更できるとは思わなかったので、ジョーククラスでカスケードを削減します。

    ハードコードされたカテゴリでジョークを保存できることを確信したら、UIでカテゴリを選択します。これで、簡単にカテゴリをジョークオブジェクトに直接設定できなくなります。値をコントローラに渡し、それを使用してバックエンドでカテゴリを選択する方がはるかに簡単です。 あなたがの線に沿って何かをしようとした場合

    <p>Category: <input type="text" name="categoryid" /></p>
    
    

    そして

    jokeSubmit(@ModelAttribute Joke joke, @Requestparam("categoryid") String categoryid) {
    
    

    今、これは動作するはずですが、きれいになりますが、あなたは私の小さな欲求不満の1つを実装しています:理想的にはORMオブジェクトはフォームオブジェクトとして使用すべきではありませんが、それは質問の範囲です私はあなたとコードの概念の分離について喜んで議論します。

あなたの答え