...JPA、OneToMany関係に苦しんで私は2つのMySQLのテーブル、最初のを持っている
料理
- ID(int型)
- USER_ID(int型)
- recipe_id(int型)
- のcreated_at(日時)
レシピ
- ID(int型)
- タイトル(varchar型)
- などなど
料理のテーブルの目的は、ユーザーが自分の料理に追加したレシピを追跡することです。
私はCookBook JPAエンティティを作成しましたが、各レシピを各料理の行にプルしようとしています。
@Entity
@Table(name="cookbook")
public class CookBook {
@Id
@GeneratedValue
private int id;
@Column(name="user_id")
private int userId;
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name = "recipe_id", referencedColumnName = "id")
private List<Recipe> recipes;
@Column(name="created_at", columnDefinition = "DATETIME")
@Temporal(TemporalType.TIMESTAMP)
private Date createdAt;
/* Getters and setters */
}
問題は、私が試してみていることに関係なく、エラーが発生し続けることです。上記で私は得る;
Unknown column 'recipes0_.recipe_id' in 'field list'
もちろん、レシピテーブルにはそのフィールドが含まれていないため正しいです。だから私はCookBookの関係を変更する。
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name = "id", referencedColumnName = "recipe_id")
private List<Recipe> recipes;
これを実行すると、私のSpring起動アプリケーションは実行されません。エラーが表示されます。
Unable to find column with logical name: recipe_id in org.hibernate.mapping.Table(cookbook) and its related supertables and secondary tables
誰かが私が間違っていることを示すことができますか?
これが役に立ちましたら、私はこのような最終的なSQLを見ていきます。
SELECT * FROM cookbook INNER JOIN recipe ON cookbook.recipe_id = recipe.id
「referencedColumnName」で何をしようとしていますか?あなたはFukをCookBookに保存する "id"という関連クラス(Recipe)に列があると指定しました...? CookBookに「recipe_id」がある場合、その関係はCookBookの1-Nではありません。 "cookbook_id"が1-Nであるためには、 "recipbook_id"がレシピに含まれているか、1-Nフィールドがレシピに入れられている必要があります。 –
私がやっていることは、cookbook.recipe_idとrecipe.idの間のリンクを作ることです。私ができるようにしたいのは、データベース上のクエリを実行して特定のユーザーIDを持つすべてのcookbook行を返し、リンクされているレシピを結果に埋め込むことです。レシピエンティティにcookbook_idを入れないでこれを行う方法はありますか?それは、レシピが複数の料理ブックに属することができるので、私に間違っていると感じるだけです。 – SheppardDigital
Cookbookのrecipe_id(CookbookからRecipeまでのFK)がある場合、CookBookのフィールドは「Recipe recipe」(N-1または1-1)としてください。 –