ObservableList i pobierania danych z bazy

0

Witam.
Robię sobie jakiś program który pobiera dane z bazy. Program wykorzystuje hibernate i javefx, i niestety mam problem z pobieraniem danych z bazy i wyświetlaniem tego w tableview.
mam taki kod:

mport java.net.URL;
import java.util.ResourceBundle;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;

import org.hibernate.Query;
import org.hibernate.Session;


public class Gui implements Initializable{




	    @FXML
	    private TableColumn<?, ?> imie;

	    @FXML
	    private TableColumn<?, ?> nr_domu;

	    @FXML
	    private TableColumn<?, ?> ulica;

	    @FXML
	    private TableColumn<?, ?> nazwisko;

	    @FXML
	    private TextField eSearch;

	    @FXML
	    private Button cButton;

	    @FXML
	    private TableColumn<?, ?> nr_lokalu;

	    @FXML
	    private TableColumn<?, ?> id;

	    @FXML
	    private TableView<Osoba> tbView;

	    @FXML
	    private TableColumn<?, ?> pesel;

        private ObservableList<Osoba> data; 

    @FXML
    void cancelButton(ActionEvent event) {
    	
    	 Session session = SessionFactoryUtil.getSessionFactory().getCurrentSession();
    	 
         session.beginTransaction();
  
        //createPerson(session);
        queryPerson(session);
       
         
       

    }

	@Override
	public void initialize(URL arg0, ResourceBundle arg1) {
		// TODO Auto-generated method stub
	
	}
	public void queryPerson(Session session){
		
       
	Query query = session.createQuery("from Osoba");
       
	ObservableList<Osoba>list = FXCollections.<Osoba>observableArrayList(query.list());
        tbView.setItems(list);
        session.close();
	}
	 
	
	 public static void createPerson(Session session) {
	        Wyborcy person = new Wyborcy();
	 
	        person.setId(3);
	        person.setImie("Pawdfdfel");       
	        person.setNazwisko("Nazwisko");
	        person.setPesel("3434334243242");
	        person.setUlica("dupaa");
	        person.setNrDomu("23");
	        person.setNrLokalu("3");
	       
	 
	        session.save(person);
	        session.getTransaction().commit();
	    }
}


Program się generuje tabela sie wyświetla ale pusta (tzn są linie i widać tabelę ale bez danych) ponieważ w bazie są trzy rekordy tm mogę bo trzech wierszach klikać pozostałe są zablokowane.
Nie ukrywam że nie bardzo rozumiem ObservableList które na stronie oracle w przykładzie ( niestety bez bazy danych ) jest pokazane.
Prosiłbym o pomoc w jaki sposób mogę ten dane z bazy pobrać i załadować do tabeli oraz informację czym jest ObservableList.
Pozdrawiam

0
import java.sql.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.hibernate.annotations.GenericGenerator;

@Entity(name="Wyborcy")
public class Wyborcy {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	
	@Column(name="imie")
	private String imie;
	
	@Column(name="nazwisko")
	private String nazwisko;
	
	@Column(name="pesel")
	private String pesel;
	
	@Column(name="ulica")
	private String ulica ;
	
	@Column(name="nrDomu")
	private String nrDomu;
	
	@Column(name="nrLokalu")
	private String nrLokalu;
	
	
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getImie() {
		return imie;
	}
	public void setImie(String imie) {
		this.imie = imie;
	}
	public String getNazwisko() {
		return nazwisko;
	}
	public void setNazwisko(String nazwisko) {
		this.nazwisko = nazwisko;
	}
	public String getUlica() {
		return ulica;
	}
	public void setUlica(String ulica) {
		this.ulica = ulica;
	}
	public String getNrDomu() {
		return nrDomu;
	}
	public void setNrDomu(String nrDomu) {
		this.nrDomu = nrDomu;
	}
	public String getNrLokalu() {
		return nrLokalu;
	}
	public void setNrLokalu(String nrLokalu) {
		this.nrLokalu = nrLokalu;
	}
	public String getPesel() {
		return pesel;
	}
	public void setPesel(String pesel) {
		this.pesel = pesel;
	}

	
	

}
0

Byłem pewny że umieściłem. Poprawiłbym jakbym mógł to edytować.
Pozdrawiam

0
  1. Na cholere Ci tyle adnotacji @Column, kiedy domyślnie pole w bazie będzie miało nazwę pola klasy ?
  2. Naucz się najpierw JPA. kurs Artura Owczarka, youtube.
  3. ObservableList umożliwia wykonanie dowolnej akcji przy modyfikacji kolekcji.
  4. Po raz pierwszy widzę tyle typów wieloznacznych o.0
  5. Po co ustawiać w takim programie id, gdy masz ustawione auto-generowanie ?

EDIT:
6. Nie korzystaj z adnotacji Hibernatea. Uzywaj w kodzie JPA, zaś Hibernate jako dostawce.

0

Dzięki za uwagi. (działają motywująco :))
Biorę się za ten kurs
Pozdrawiam

0

Przejrzałem sobie ten kurs ( bardzo fajny ) i wyciągnąłem wnioski ( mam taką nadzieje )
Korzystam z JPA ( na razie jeżeli chodzi o tą stronę to wszystko fajnie działa)
Niestety dalej mam problem z tableview i prosiłbym o pomoc.
Mam taką funkcję

EntityManagerFactory EntityManagerFactory = Persistence
				.createEntityManagerFactory("wyboryDB");
		EntityManager entityManager = EntityManagerFactory
				.createEntityManager();
		TypedQuery<Wyborca> query = entityManager.createQuery(
				"select w from Wyborca w", Wyborca.class);
		data = FXCollections.<Wyborca> observableArrayList(query
				.getResultList());
		tbView.setItems(data);
		entityManager.clear();
		EntityManagerFactory.close();

Pobiera ona dane i mogę je bez problemu wyświetlić jednak nie potrafię ich załadować do tabeli.
Tak jak przedtem niby wszystko się ładuję ( tzn pojawią się kratki ) lecz niestety brak danych.
Nie mam pojęcia co robię źle ponieważ program nie zwraca żadnego błędu

Klasa wyborca wygląda następująco.

package wybory.rs.jpa;

import java.sql.Timestamp;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "Wyborcy")
public class Wyborca {

	@Id
	@GeneratedValue
	private int id;

	private String imie;
	private String nazwisko;
	private String pesel;
	private String ulica;
	private String nr_domu;
	private String nr_lokalu;
	private Timestamp data_glosowania;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getImie() {
		return imie;
	}

	public void setImie(String imie) {
		this.imie = imie;
	}

	public String getNazwisko() {
		return nazwisko;
	}

	public void setNazwisko(String nazwisko) {
		this.nazwisko = nazwisko;
	}

	public String getPesel() {
		return pesel;
	}

	public void setPesel(String pesel) {
		this.pesel = pesel;
	}

	public String getUlica() {
		return ulica;
	}

	public void setUlica(String ulica) {
		this.ulica = ulica;
	}

	public String getNr_domu() {
		return nr_domu;
	}

	public void setNr_domu(String nr_domu) {
		this.nr_domu = nr_domu;
	}

	public String getNr_lokalu() {
		return nr_lokalu;
	}

	public void setNr_lokalu(String nr_lokalu) {
		this.nr_lokalu = nr_lokalu;
	}

	public Timestamp getData_glosowania() {
		return data_glosowania;
	}

	public void setData_glosowania(Timestamp data_glosowania) {
		this.data_glosowania = data_glosowania;
	}

}

Klasa GUI wygląda tak:

package wybory.rs.jpa;

import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.TypedQuery;

public class GUI implements Initializable {
        @FXML
	private TableColumn<Wyborca,Integer> idCol;

	@FXML
	private TableColumn<Wyborca,String> nr_domuCol;

	@FXML
	private TableColumn<Wyborca,String> nr_lokaluCol;

	@FXML
	private TableColumn<Wyborca,String> imieCol;

	@FXML
	private TableColumn<Wyborca, String> nazwiskoCol;

	@FXML
	private TableColumn<Wyborca, String> ulicaCol;

	@FXML
	private TableColumn<Wyborca, Timestamp> data_glosowaniaCol;

	@FXML
	private TextField eSearch;

	@FXML
	private Button cButton;

	@FXML
	private TableView<Wyborca> tbView;


	@FXML
	private TableColumn<Wyborca, String> peselCol;
	private ObservableList<Wyborca> data;

	@FXML
	void loadTable(ActionEvent event) {
		EntityManagerFactory EntityManagerFactory = Persistence
				.createEntityManagerFactory("wyboryDB");
		EntityManager entityManager = EntityManagerFactory
				.createEntityManager();
		TypedQuery<Wyborca> query = entityManager.createQuery(
				"select w from Wyborca w", Wyborca.class);
		data = FXCollections.<Wyborca> observableArrayList(query
				.getResultList());
		tbView.setItems(data);
		entityManager.clear();
		EntityManagerFactory.close();

	}

	@Override
	public void initialize(URL location, ResourceBundle resources) {
		// TODO Auto-generated method stub

	}

}

Ma pytanie co jeszcze pominąłem ewentualnie o czym zapomniałem - reasumując proszę o pomoc.
Pozdrawiam

0

Już wiem o czym zapomniałem

idCol.setText("ID");
		idCol.setCellValueFactory(new PropertyValueFactory<>("id"));
		imieCol.setText("IMIĘ");
		imieCol.setCellValueFactory(new PropertyValueFactory<>("imie"));
		nazwiskoCol.setText("NAZWISKO");
		nazwiskoCol.setCellValueFactory(new PropertyValueFactory<>("nazwisko"));
		peselCol.setText("PESEL");
		peselCol.setCellValueFactory(new PropertyValueFactory<>("pesel"));
	    ulicaCol.setText("ULICA");
		ulicaCol.setCellValueFactory(new PropertyValueFactory<>("ulica"));
		nr_domuCol.setText("NR DOMU");
		nr_domuCol.setCellValueFactory(new PropertyValueFactory<>("nr_domu"));
		nr_lokaluCol.setText("NR LOKALU");
		nr_lokaluCol.setCellValueFactory(new PropertyValueFactory<>("nr_lokalu"));
		data_glosowaniaCol.setText("D. GŁOSOWANIA");
		data_glosowaniaCol.setCellValueFactory(new PropertyValueFactory<>("data_glosowania"));
0
		tableColumnLogin.setCellValueFactory(new PropertyValueFactory<>(
				"login")); // i tak dla każdej kolumny
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1