2016-01-23 6 views
0

Я использую hibernate 5.0.7 и JavaFX для пользовательских интерфейсов. Я получаю список данных из базы данных, я пытался показать их в tableView, но ничего не показано в tableView.JavaFX TableView и hibernate

Вот структура таблицы

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

Object Relational Mapping:

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

Debug содержимое списка и убедитесь, что элементы действительно являются 'случаи Product'. Вероятно, лучше использовать здесь запрос JPQL вместо SQL-запроса, но SQL-версия должна работать (я думаю ...). Предполагая, что у вас есть 'Product' в списке, вы можете показать остальную часть кода JavaFX, т. Е. Создать таблицу и столбцы и отобразить таблицу. –

+0

Отладчик отображает список как [Object [X] @Refrence] not [Product [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());