【发布时间】:2015-09-30 10:41:33
【问题描述】:
我想在表格供应商详细信息和产品详细信息之间建立一对多的关系。就像一个供应商可以拥有多种产品一样。但是当我将数据插入表中时,它会插入所有四个字段,但不会将 vendorid 映射到 ProductDetail 表中 生成的查询是这样的。
Hibernate: insert into ProductInfo (productCategory, productDetails, productPrice, VendorId) values (?, ?, ?, ?) It shuld map vendor ID also but in table its empty.
VendorDetail.java
package com.cts.entity;
import javax.persistence.*;
@Entity
@Table(name = "VendorInfo")
public class VendorDetails {
@Id
@Column
private Long VendorId;
@OneToMany
private ProductDetails productdetail;
@Column
private String VendorName;
@Column
private String Password;
public String getVendorName() {
return VendorName;
}
public void setVendorName(String vendorName) {
VendorName = vendorName;
}
public Long getVendorId() {
return VendorId;
}
public void setVendorId(Long vendorId) {
VendorId = vendorId;
}
public String getPassword() {
return Password;
}
public void setPassword(String password) {
Password = password;
}
}
ProductDetails.java
package com.cts.entity;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity@Table(name = "ProductInfo")
public class ProductDetails {
@ManyToOne(cascade = CascadeType.ALL)@JoinColumn(name = "VendorId")
private VendorDetails vendordetails;
public ProductDetails() {
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private int productId;
@Column
private String productCategory;
@Column
private String productDetails;
@Column
private String productPrice;
public VendorDetails getVendordetails() {
return vendordetails;
}
public void setVendordetails(VendorDetails vendordetails) {
this.vendordetails = vendordetails;
}
public int getProductId() {
return productId;
}
public void setProductId(int productId) {
this.productId = productId;
}
public String getProductCategory() {
return productCategory;
}
public void setProductCategory(String productCategory) {
this.productCategory = productCategory;
}
public String getProductDetails() {
return productDetails;
}
public void setProductDetails(String productDetails) {
this.productDetails = productDetails;
}
public String getProductPrice() {
return productPrice;
}
public void setProductPrice(String productPrice) {
this.productPrice = productPrice;
}
}
DAO 类 ProductDetailDaoImpl.java
package com.cts.Dao;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.cts.entity.ProductDetails;
import com.cts.entity.to.ProductDetailsTo;
@Repository
public class ProductDetailDaoImpl implements ProductDetailDao {
@Autowired
SessionFactory sessionFactory;
@Transactional
public boolean saveProductInfo(ProductDetailsTo productTo) {
System.out.println("M in Registration DAO");
System.out.println(productTo.getProductCategory());
System.out.println(productTo.getProductDetails());
System.out.println(productTo.getProductId());
System.out.println(productTo.getProductPrice());
//getting productTo data to entity class
ProductDetails prodet = productTo.getEntity();
System.out.println("Value of product details is:" + prodet.getProductDetails());
sessionFactory.getCurrentSession().save(prodet);
return false;
}
}
【问题讨论】:
-
@OneToMany(targetEntity = ProductDetails.class) 可能有帮助吗?你也可以尝试添加@JoinColumn