我讀過很多教程關於彈簧休眠的關係,但我有點困惑如何在我的情況下使用它們......我的產品/類別實體定義如下:春天Hibernate的產品 - 類別關係
產品
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column
private int id;
@Column
private int category;
.
.
.
類別
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column
private int id;
@NotEmpty
@Column
@Size (max = 25)
private String name;
.
.
.
所以,我LIK E在產品列表頁面,根據語音「類別」將出現在類別名稱,並在產品形成的類別列表... 在我來說,一個產品只適合一類,所以如果我是正確的應該是@ManyToOne但我不知道如何實現這...在我的產品數據庫我已經CategoryID字段,但如果我標記類實體字段作爲@OneToMany它不會被存儲到數據庫...
編輯 我已經改變了像這樣(的建議): Product.class
@Table(name = "products")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column
private int id;
@NotEmpty
@Column
@Size (max = 25)
private String name;
@Column
@Size (max = 255)
private String description;
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "category_id", nullable = false)
private Category category;
個Category.class
@Entity
@Table(name = "categories")
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column
private int id;
@NotEmpty
@Column
@Size (max = 25)
private String name;
@Column
@Size (max = 255)
private String description;
//Here mappedBy indicates that the owner is in the other side
@OneToMany(fetch = FetchType.EAGER, mappedBy = "category", cascade = CascadeType.ALL)
private Set<Product> products = new HashSet<Product>();
控制器
@RequestMapping(value = "/add/", method = RequestMethod.POST)
public String addProduct(
@ModelAttribute(value = "product") @Valid Product product,
BindingResult result, ModelMap model, Category category) {
if (result.hasErrors()) {
return "forms/productForm";
}
try {
category.addProduct(product);
product.setCategory(category);
// Add product to db
productService.addProduct(product);
} catch (Exception e) {
log.error("/add/---" + e);
return "redirect:/product/deniedAction/?code=0";
}
return "redirect:/admin/product/";
}
我還增加了產品的控制器上的@InitBinder從產品形態串類別將數據轉換......但現在,當我節省了產品它會自動保存一個類別,而不是附加當前選擇之一......
太好了!這是我需要的缺失部分!順便說一句,我有沒有從產品數據庫表中刪除類別ID?還有......我還要更改類別db一個嗎? –
你不需要自己創建表格。 Hibernate可以爲你做這件事 - 當你運行它時,模式是由註釋(如果需要的話)生成的。除非您已經擁有需要保留的數據,否則我建議刪除所有表格,運行代碼,然後檢查新創建的表格和FK約束,以查看它們是否與預期一致。 – NickJ
我覺得如果我聲明瞭auto.dll,hibernate會爲我做這件事 –