我读过很多教程关于弹簧休眠的关系,但我有点困惑如何在我的情况下使用它们......我的产品/类别实体定义如下:春天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会为我做这件事 –