2016-01-23 86 views
0

我使用hibernate 5.0.7和JavaFX For UI's。我從數據庫中獲取數據列表,我試圖在tableView中顯示它們,但沒有顯示在tableView中。JavaFX TableView和休眠

這裏是表結構

CREATE TABLE product 
(
    idproduct serial NOT NULL, 
    namefr character varying(50), 
    qtyinhand double precision, 
    sellprice double precision, 
    CONSTRAINT product_pkey PRIMARY KEY (idproduct) 
) 

對象關係映射:

package model; 

import javafx.beans.property.*; 
import javax.persistence.*; 


@Entity 
@Table(name = "Product") 
@Access(AccessType.PROPERTY) 
public class Product { 
    private LongProperty idProduct; 
    private StringProperty nameFr; 
    private DoubleProperty qtyInHand; 
    private DoubleProperty sellPrice; 


public Product() { 
     idProduct = new SimpleLongProperty();  
     nameFr = new SimpleStringProperty(); 
     qtyInHand = new SimpleDoubleProperty(); 
     sellPrice = new SimpleDoubleProperty(); 

    } 

@Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "product_seq_gen") 
    @SequenceGenerator(name = "product_seq_gen", sequenceName = "product_idproduct_seq") 
    @Column(name = "idproduct", unique = true, nullable = false) 
    public Long getIdProduct() { 
     return idProduct.get(); 
    } 

    public LongProperty idProductProperty() { 
     return idProduct; 
    } 

    public void setIdProduct(Long idProduct) { 
     this.idProduct.set(idProduct); 
    } 

@Column(name = "nameFr") 
    public String getNameFr() { 
     return nameFr.get(); 
    } 

    public StringProperty nameFrProperty() { 
     return nameFr; 
    } 

    public void setNameFr(String nameFr) { 
     this.nameFr.set(nameFr); 
    } 

@Column(name = "qtyInHand") 
    public double getQtyInHand() { 
     return qtyInHand.get(); 
    } 

    public DoubleProperty qtyInHandProperty() { 
     return qtyInHand; 
    } 

    public void setQtyInHand(double qtyInHand) { 
     this.qtyInHand.set(qtyInHand); 
    } 

    @Column(name = "sellPrice") 
    public double getSellPrice() { 
     return sellPrice.get(); 
    } 

    public DoubleProperty sellPriceProperty() { 
     return sellPrice; 
    } 

    public void setSellPrice(double sellPrice) { 
     this.sellPrice.set(sellPrice); 
    } 
} 

我用冬眠來檢索的產品數據庫列表:

public ObservableList<Product> findAll() { 

     try { 

      session.beginTransaction(); 
      Query query = session.createSQLQuery("select * from product"); 
      ObservableList<Product> list = FXCollections.observableArrayList(query.list()); 

      session.getTransaction().commit(); 
      session.close(); 
      return list; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return null; 
     } 

    } 

我之後設置表格視圖以顯示數據:

tcID.setCellValueFactory(new PropertyValueFactory<Product, Long>("idProduct")); 
tcNameFR.setCellValueFactory(new PropertyValueFactory("nameFr")); 
     tcQtyInHand.setCellValueFactory(new PropertyValueFactory("qtyInHand")); 
tcSellPrice.setCellValueFactory(new PropertyValueFactory<Product, Double>("sellPrice")); 


ProductDAO dao = new ProductDAO(); 
     tableView.getItems().addAll(dao.findAll()); 

之後,我不能得到項目顯示在Tablview,而不是當我調試 我注意到dao.findAll()返回一個大小> 0的列表,但表不顯示任何東西。

+0

調試列表中的內容,並確保元素真的是'Product'實例。在這裏使用JPQL查詢而不是SQL查詢可能會更好,但SQL版本應該可以工作(我認爲...)。假設列表中有Product,可以顯示JavaFX代碼的其餘部分,即創建表格和列並顯示錶格。 –

+0

調試器顯示列表爲[對象[X] @Refrence]而不是[產品[X] @Refrence] –

+0

我現在不是真的如何在JPQL中做到這一點,我試過Query query = session.createQuery(「select t從產品t「);但編輯器顯示語法不正確。 –

回答

1

由於您正在使用SQL查詢,因此Hibernate不知道將您的實體與查詢關聯。你可以做

SQLQuery query = session.createSQLQuery("select * from product"); 
query.addEntity(Product.class); 
ObservableList<Product> list = FXCollections.observableArrayList(query.list()); 

它可能更好地使用雖然HQL查詢:

// the really concise, but not very readable "from Product" works as the query too 
Query query = session.createQuery("select p from Product as p"); 
ObservableList<Product> list = FXCollections.observableArrayList(query.list());