2015-06-20 48 views
0

我想創建OneToOne關係使用兩個類Stock和詳細信息之間的Hiberate/JPA,所以當我生成數據庫時,我沒有看到StockDetail表中的外鍵應該參考股票,這是我的代碼:生成數據庫使用休眠annontation(外鍵未找到)

股票CLASSE:

@Entity 
@Table(name = "stock", catalog = "migration") 
public class Stock implements java.io.Serializable { 

    private Integer Stock_Id; 
    private StockDetail stockDetail; 

    @Id 
    @GeneratedValue(strategy = IDENTITY) 
    @Column(name = "Stock_Id", nullable = false) 
    public Integer getStock_Id() { 
     return this.Stock_Id; 
    } 

    @OneToOne(fetch = FetchType.LAZY, mappedBy = "stock", cascade = CascadeType.ALL) 
    public StockDetail getStockDetail() { 
     return this.stockDetail; 
    } 

} 

StockDetail CLASSE:

@Entity 
@Table(name = "detail_stock", catalog = "migration") 
public class StockDetail implements java.io.Serializable { 

    private Integer Stock_Id; 
    private Stock stock; 

    @GenericGenerator(name = "generator", strategy = "foreign", 
    parameters = @Parameter(name = "property", value = "stock")) 
    @Id 
    @GeneratedValue(generator = "generator") 
    @Column(name = "Stock_Id", unique = true, nullable = false) 
    public Integer getStock_Id() { 
     return this.Stock_Id; 
    } 

    @OneToOne(fetch = FetchType.LAZY) 
    @PrimaryKeyJoinColumn 
    public Stock getStock() { 
     return this.stock; 
    } 

} 

我發現一個話題同一個問題,但它並沒有解決我的probleme:

Why Foreign key not inserted in hibernate

+0

任何幫助Please:D –

+0

你是什麼意思的「我找不到外鍵」?你期望在生成的表格中找到什麼,以及你發現了什麼? –

+0

我在StockDetail表中看不到應該引用Stock的外鍵。 –

回答

0

你必須做這樣的事情在StockDetail

@Entity 
@Table(name = "detail_stock", catalog = "migration") 
public class StockDetail implements java.io.Serializable { 

    private Integer stockDetailId; 
    private Stock stock; 

    @OneToOne(fetch = FetchType.LAZY) 
    public Stock getStock() { 
     return this.stock; 
    } 

    /** 
    * @param stock 
    *   the stock to set 
    */ 
    public void setStock(Stock stock) { 
     this.stock = stock; 
    } 

    /** 
    * @return the stockDetailId 
    */ 
    @Id 
    public Integer getStockDetailId() { 
     return stockDetailId; 
    } 

    /** 
    * @param stockDetailId the stockDetailId to set 
    */ 
    public void setStockDetailId(Integer stockDetailId) { 
     this.stockDetailId = stockDetailId; 
    } 

} 

與配置的問題是,您要使用以下配置將stock_detail的主鍵作爲stock_id。

@Id 
@GeneratedValue(generator = "generator") 
@Column(name = "Stock_Id", unique = true, nullable = false) 

相反,您應該做的是將stock_detail_id作爲stock_details的主鍵。既然你在兩個實體之間有一個雙向的一對一映射,hibernate會自動生成具有上述映射的外鍵。

+0

所以stockDetailId將作爲外鍵? –

+0

這將是主鍵。 –

+0

所以我們必須與股票和StockDetails有關係使用外鍵(StockId) –