2015-09-30 93 views
-1

我想在表供應商詳細信息和產品詳細信息之間建立一對多關係。像一個供應商可以有多個產品。但是當我插入數據到表中插入所有四個字段,但不映射vendorid到ProductDetail表 和生成的查詢是這樣的。無法使用Hibernate Mapping映射字段

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; 

@[email protected](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; 
    } 

} 
+0

@OneToMany(targetEntity = ProductDetails.class)可能有幫助嗎?也可以嘗試加入@JoinColumn – Marcel

回答

0

VendorDetails有很多產品詳細所以你需要做一對多註釋是這樣的: -

@OneToMany(mappedBy="vendordetails") //mappedBy value will be what you declared //in ProductDetails class. 
private Collection<ProductDetails> productdetail=new ArrayList<ProductDetails>; 

創造的這個setter和getter。

Now in ProductDetails class you need to annotate many to one like this:- 
@ManyToOne(cascade = CascadeType.ALL) 
@JoinColumn(name = "VendorId") 
private VendorDetails vendordetails; 

那麼新的一列名爲「VENDORID」將表「ProductInfo」,由於申報的mappedBy價值創造=「vendordetails」所以每個供應商ID是插入。

+0

既然在你的代碼中你想創建一個到多個,但是你沒有使用任何Collection並且它是子類。而其他的事情是你需要賦予@onetomany的mappedBy屬性,否則它將創建一個臨時表並插入這兩個表的主鍵。 –

+0

謝謝Gaurav ... :) –

0

我想你應該替換代碼
@OneToMany private ProductDetails productdetail;

@OneToMany 私訂productdetailSet;

併爲此創建setter和getter。

您可以使用註釋訪問博客http://gaurav1216.blogspot.in/2014/01/hibernate-tutorial-day-5.html一對多。

+0

它不工作的任何其他建議... –

+0

@ManyToOne(級聯= CascadeType.ALL) \t @JoinColumn(name = 「VENDORID」) \t私人VendorDetails vendordetails;如果m寫這段代碼,它會生成一個新表,其中包含兩個fiels productdetail_productid和vendordetail_vendorid –