Я использую 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, но таблица ничего не показывает.
Debug содержимое списка и убедитесь, что элементы действительно являются 'случаи Product'. Вероятно, лучше использовать здесь запрос JPQL вместо SQL-запроса, но SQL-версия должна работать (я думаю ...). Предполагая, что у вас есть 'Product' в списке, вы можете показать остальную часть кода JavaFX, т. Е. Создать таблицу и столбцы и отобразить таблицу. –
Отладчик отображает список как [Object [X] @Refrence] not [Product [X] @Refrence] –
Я действительно не сейчас, как это сделать в JPQL, я попробовал Query query = session.createQuery ("select t из продукта t "); но редактор показывает, что синтаксис неверен. –