2017-02-17 92 views
0

我有3個由外鍵連接的表。我需要通過連接所有表來獲取數據。以下是我的3個實體類。如何使用spring和hibernate從3個表中獲取數據?

Stock.java

@Entity 
public class Stock { 
    private int id; 
    private Date entryDate; 
    private int entryUserId; 
    private BigDecimal parValue; 
    private int status; 
    private Timestamp statusChgDate; 
    private int statusChgUserId; 
    private String stockName; 
    private String stockSymbol; 

    @Id 
    @Column(name = "Id", nullable = false) 
    public int getId() { 
     return id; 
    } 

    @Basic 
    @Column(name = "EntryDate", nullable = false) 
    public Date getEntryDate() { 
     return entryDate; 
    } 

    @Basic 
    @Column(name = "EntryUserID", nullable = false) 
    public int getEntryUserId() { 
     return entryUserId; 
    } 

    @Basic 
    @Column(name = "ParValue", nullable = false, precision = 2) 
    public BigDecimal getParValue() { 
     return parValue; 
    } 

    @Basic 
    @Column(name = "Status", nullable = false) 
    public int getStatus() { 
     return status; 
    } 

    @Basic 
    @Column(name = "StatusChgDate", nullable = false) 
    public Timestamp getStatusChgDate() { 
     return statusChgDate; 
    } 

    @Basic 
    @Column(name = "StatusChgUserID", nullable = false) 
    public int getStatusChgUserId() { 
     return statusChgUserId; 
    } 

    @Basic 
    @Column(name = "StockName", nullable = false, length = 100) 
    public String getStockName() { 
     return stockName; 
    } 

    @Basic 
    @Column(name = "StockSymbol", nullable = false, length = 15) 
    public String getStockSymbol() { 
     return stockSymbol; 
    } 

    ... setters ... 
} 

StockDetl.java

@Entity 
public class StockPriceDetl { 
    private int id; 
    private BigDecimal amount; 
    private BigDecimal closingPrice; 
    private BigDecimal diffAmount; 
    private BigDecimal maxPrice; 
    private BigDecimal minPrice; 
    private int numberOfTransaction; 
    private BigDecimal previousClosingPrice; 
    private Timestamp statusChgDate; 
    private int statusChgUserId; 
    private int tradedShares; 
    private Stock stockByStockId; 

    @Id 
    @Column(name = "Id", nullable = false) 
    public int getId() { 
     return id; 
    } 

    @Basic 
    @Column(name = "Amount", nullable = false, precision = 2) 
    public BigDecimal getAmount() { 
     return amount; 
    } 

    @Basic 
    @Column(name = "ClosingPrice", nullable = false, precision = 2) 
    public BigDecimal getClosingPrice() { 
     return closingPrice; 
    } 

    @Basic 
    @Column(name = "DiffAmount", nullable = false, precision = 2) 
    public BigDecimal getDiffAmount() { 
     return diffAmount; 
    } 

    @Basic 
    @Column(name = "MaxPrice", nullable = false, precision = 2) 
    public BigDecimal getMaxPrice() { 
     return maxPrice; 
    } 

    @Basic 
    @Column(name = "MinPrice", nullable = false, precision = 2) 
    public BigDecimal getMinPrice() { 
     return minPrice; 
    } 

    @Basic 
    @Column(name = "NumberOfTransaction", nullable = false) 
    public int getNumberOfTransaction() { 
     return numberOfTransaction; 
    } 

    @Basic 
    @Column(name = "PreviousClosingPrice", nullable = false, precision = 2) 
    public BigDecimal getPreviousClosingPrice() { 
     return previousClosingPrice; 
    } 

    @Basic 
    @Column(name = "StatusChgDate", nullable = false) 
    public Timestamp getStatusChgDate() { 
     return statusChgDate; 
    } 

    @Basic 
    @Column(name = "StatusChgUserID", nullable = false) 
    public int getStatusChgUserId() { 
     return statusChgUserId; 
    } 

    @Basic 
    @Column(name = "TradedShares", nullable = false) 
    public int getTradedShares() { 
     return tradedShares; 
    } 

    @ManyToOne 
    @JoinColumn(name = "StockId", referencedColumnName = "Id", nullable = false) 
    public Stock getStockByStockId() { 
     return stockByStockId; 
    } 

    ... setters ... 
} 

StockPriceMast.java

@Entity 
public class StockPriceMast { 
    private int id; 
    private Date entryDate; 
    private int entryUserId; 
    private String remarks; 
    private int status; 
    private Timestamp statusChgDate; 
    private int statusChgUserId; 
    private Date tranDate; 

    @Id 
    @Column(name = "Id") 
    public int getId() { 
     return id; 
    } 

    @Basic 
    @Column(name = "EntryDate") 
    public Date getEntryDate() { 
     return entryDate; 
    } 

    @Basic 
    @Column(name = "EntryUserID") 
    public int getEntryUserId() { 
     return entryUserId; 
    } 

    @Basic 
    @Column(name = "Remarks") 
    public String getRemarks() { 
     return remarks; 
    } 

    @Basic 
    @Column(name = "Status") 
    public int getStatus() { 
     return status; 
    } 

    @Basic 
    @Column(name = "StatusChgDate") 
    public Timestamp getStatusChgDate() { 
     return statusChgDate; 
    } 

    @Basic 
    @Column(name = "StatusChgUserID") 
    public int getStatusChgUserId() { 
     return statusChgUserId; 
    } 

    @Basic 
    @Column(name = "TranDate") 
    public Date getTranDate() { 
     return tranDate; 
    } 

    ... setters ... 
} 

這裏客戶將發送StockSymbol和兩個日期。我需要從某些日期(如說01/01/2001到01/01/2002(Trandate on stockpricemast))填充maxprice,minprice,closingprice和previousclosingPrice。

我怎樣才能做到這一點使用Hibernate? 我想實現的SQL查詢。

Select d.MinPrice,d.MaxPrice,d.ClosingPrice, d.PreviousClosingPrice 
from StockPriceDetl d 
inner join Stock st on d.StockId=st.Id 
inner join StockPriceMast sm on d.MastId = sm.Id 
where st.StockSymbol='NABIL' and sm.TranDate 
between '2001-01-01'and'2002-01-01' 
+0

StockPriceMast與其他表的關係是什麼? –

+0

StockDetl有一個外鍵命名mastid和交易日期根據我需要從表StockDetl取minprice,maxprice,closingprice和previsousclosingprice存儲在StockPriceMast。 – sagar

+0

爲什麼不通過休眠添加StockDetl到StockPriceMast映射呢? – Maddy

回答

0

您是否想過JPA存儲庫? 在那裏你可以定義你的SQL的方法如下:

public interface StockDetlRepository extends JpaRepository<StockDetl, Long>, QueryDslPredicateExecutor<StockDetl> { 

    @Query("SELECT sd from StockDetl sd, Stock s, StockPriceMast spm WHERE s.id = sd.stockId AND s.madtId = spm.id AND s.stockSymbol = ?1 AND spm.trandDate BETWEEN ?2 AND ?3") 
    List<StockDetl> findPricesByStockSymbolAndDate(String stockSymbol, Timestamp fromTranDate, Timestamp toTranDate); 

} 
+0

但是您沒有在StockDetl發佈任何mastId。 –

+0

以及我不知道這件事。我想試試這個。你能建議我如何定義我的實體嗎?有點困惑我應該在哪裏放OnetoOne或一對多或多對一 – sagar

+0

你可以找到https://github.com/spring-projects/spring-petclinic –

相關問題