2016-11-21 8 views
0

私はUserクラスとRecipeクラスを持っています。 Recipeクラスには、どのユーザがどのレシピを所有しているかを示すフィールドがあります。ユーザーはIDを持っています。私はこれがManyToOne接続であるべきだと考えています。なぜなら、1人のユーザーが多くのレシピを持つことができるからです。私の質問、彼は、どのように私は自分自身を少し失ってこれらの注釈で、Javaの春にこれをコード化することができます。これは私が思いついたものですが、うまくいきません。hibernateとjava springを使用してテーブルを作成しようとしています

@Entity 
public class Recipe { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int recipe_id; 
    private String name; 
    @JoinColumn(name="user_id" , table="User") 
    private int user_id; 
    private LocalDate dateUploaded; 
    private String description; 

    public int getId() { 
     return recipe_id; 
    } 

    public void setId(int recipe_id) { 
     this.recipe_id = recipe_id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getUser() { 
     return user_id; 
    } 

    public void setUser(int user_id) { 
     this.user_id = user_id; 
    } 

    public LocalDate getDateUploaded() { 
     return dateUploaded; 
    } 

    public void setDateUploaded(LocalDate dateUploaded) { 
     this.dateUploaded = dateUploaded; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 
} 

とユーザークラス

@Entity 
public class User { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int user_id; 
    private String firstName; 
    private String lastName; 
    private String userName; 
    private String password; 

    public User(int user_id, String firstName, String lastName, String userName, String password, int[] favoriteRecipes, int[] myRecipes) { 
     this.user_id = user_id; 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.userName = userName; 
     this.password = password; 
    } 

    public int getId() { 
     return user_id; 
    } 

    public void setId(int user_id) { 
     this.user_id = user_id; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public String getUserName() { 
     return userName; 
    } 

    public void setUserName(String userName) { 
     this.userName = userName; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 
} 
+0

質問の関連付けは本当ですか、ユーザーがアップロードしたすべてのレシピを持つユーザークラスのリストプロパティを追加しますか?アソシエーションを双方向にする。 – Ubercool

+0

いいえ、私たちは第1正規形を制動するので、リストを持ちたくありません。 – Ermehtar

答えて

0
You should add one more field in user table that is getRecieps and add this annotation. 

@OneToMany(cascade = CascadeType.ALL) 
@JoinTable(name = "USER_RECEIPE", joinColumns = { @JoinColumn(name = "user_id") }, inverseJoinColumns = { @JoinColumn(name = "receipe_id") }) 

    public Set<receipe> getReceipes() { 
     return this.receipes; 
    } 

    public void setreceipes(Set<receipe> receipes) { 
     this.receipes= receipes; 
    } 
0

私はあなたがRecipeUser間ManyToOne関係を達成しようとしている理解しています。

あなたがする必要があるのは、これを試してみて、あなたはまだ問題に直面した場合、私に知らせて

@ManyToOne(optional = false) 
@JoinColumn(name="user_id") 
private int user_id; 

レシピクラスにuser_idフィールドに注釈の下に追加しています。

+0

質問ではどのようなエラーが発生していますか? – Ubercool

+0

その地域のManyToOneアノテーションやその他のアノテーションを実行し、JoinColumnに(name = "user_id"、table = "User")を含めると、次のエラーが表示されます:期待されるセカンダリテーブルが見つかりません: .einar.inthefridge.model.Recipe – Ermehtar

+0

テーブル名をクロスチェックすると、エンティティクラスファイルのテーブル名を明示的に記述していないので、名前が 'user'と' recipe'のテーブルが必要です – Ubercool

関連する問題