外部キーがデータベースに入力されていないため、Hibernate ManyToOne に問題があります。
だから私は準備クラスと食材クラスを持っています. componentsId は私の準備クラスの外部キーであるはずです。
私の準備クラスには、ManyToOne アノテーションがあります。nullable=false を設定しないと、データベースの準備テーブルを埋めることができますが、外部キーは「NULL」のままです。nullable=false を設定すると、もちろん、「非 null プロパティが null または一時的な値を参照しています...」というエラー メッセージが表示されます。
私のPreparationDaoにも何か問題があるのかもしれません...
私は自分が間違っていることを本当に知りません。あなたが私を助けてくれることを願っています。
これが私の最初の質問であるため、事前に感謝し、事前に申し訳ありません(質問方法に関するガイドラインを読んだ後、私はほとんど質問することを恐れていました:D)、私の問題も非常に愚かかもしれませんが、私は絶対的な初心者です!
私の材料クラス:
@Entity
@Table(name="tbl_ingredients")
public class Ingredients {
@Id
@GeneratedValue
@Column(name="ingredients_id")
private Integer id;
private String name;
private float percent;
// @OneToMany(mappedBy="ingredients", cascade=CascadeType.ALL)
// private Set<Preparation> preparation = new HashSet<Preparation>();
//
//
// public Set<Preparation> getPreparation() {
// return preparation;
// }
//
// public void setPreparation(Set<Preparation> preparation) {
// this.preparation = preparation;
// }
//Konstrukturmethode der Klasse
public Ingredients(){
}
public Ingredients(Integer id, String name, float percent){
this(name,percent);
setId(id);
}
public Ingredients(String name, float percent){
setName(name);
setPercent(percent);
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getPercent() {
return percent;
}
public void setPercent(float percent) {
this.percent = percent;
}
}
私の準備クラス:
@Entity
@Table(name="tbl_preparation")
public class Preparation {
@Id
@GeneratedValue
@Column(name="preparation_id")
private Integer id;
private int amount;
private String bevvalue;
@ManyToOne (optional = false, fetch = FetchType.LAZY)
@JoinColumn(name="ingredients_id", nullable=false)
private Ingredients ingredients;
@OneToMany(mappedBy="preparation")
private Set<Cocktail> cocktail = new HashSet<Cocktail>();
// Getter und Setter Methoden
public Preparation(){
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
public Ingredients getIngredients() {
return ingredients;
}
public void setIngredients(Ingredients ingredients) {
this.ingredients = ingredients;
}
public String getBevvalue() {
return bevvalue;
}
public void setBevvalue(String bevvalue) {
this.bevvalue = bevvalue;
}
public Set<Cocktail> getCocktail() {
return cocktail;
}
public void setCocktail(Set<Cocktail> cocktail) {
this.cocktail = cocktail;
}
}
準備ダオ:
public class PreparationDao extends HibernateDaoSupport {
// Methode zum Anlegen der Zubereitung in der Datenbank
// Methode zum Speichern der Zubereitung
public Preparation save(Preparation preparation) {
HibernateTemplate template = getHibernateTemplate();
template.saveOrUpdate(preparation);
return preparation;
}
// ing cocktailid muss wieder eingetragen werden
public void create(Integer [] ingredientsid, int amount, String bevvalue){
// Set<Cocktail> cocktail = new HashSet<Cocktail>();
HibernateTemplate template = getHibernateTemplate();
Ingredients ingredients = (Ingredients) template.get(Ingredients.class, ingredientsid);
Preparation p = new Preparation();
// p.setCocktail(cocktail);
p.setIngredients(ingredients);
p.setAmount(amount);
p.setBevvalue(bevvalue);
template.saveOrUpdate(p);
}