JAVA, maven, hibernate wyszukiwanie w bazie danych SQL

0

Cześć, stworzyłem aplikacje przy użyciu Mavena i łączę się z bazą danych MySQL. Wszystko, wydaje się, że działa poprawnie, tylko przy wyszukiwaniu danych z bazy i ich wyświetlaniu w konsoli jest problem z kluczami obcymi - mianowicie nie wyświetla się zawartość danej komórki tylko nazwa pakietu i jakiś zlepek znaków.
Pytanie brzmi jak zrobić żeby w tym miejscu wyświetlało rzeczywistą zawartość komórki.

KOD:

Uzytkownik.java

package pakiet.domain;


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

@Entity

public class Uzytkownik {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private long id;
	private String User;
	private String Password;
	@OneToOne
	private Adres adres;
	@OneToOne(mappedBy = "uzytkownik")
	private Wypozyczone_ksiazki wypozyczone_ksiazki;

	public long getId() {
		return id;
	}

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

	public String getUser() {
		return User;
	}

	public void setUser(String user) {
		User = user;
	}

	public String getPassword() {
		return Password;
	}

	public Wypozyczone_ksiazki getWypozyczone_ksiazki() {
		return wypozyczone_ksiazki;
	}

	public void setWypozyczone_ksiazki(Wypozyczone_ksiazki wypozyczone_ksiazki) {
		this.wypozyczone_ksiazki = wypozyczone_ksiazki;
	}

	public void setPassword(String password) {
		Password = password;
	}

	public Adres getAdres() {
		return adres;
	}

	public void setAdres(Adres adres) {
		this.adres = adres;
	}


}

Wypozyczone_ksiazki.java

package pakiet.domain;


import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;


@Entity


public class Wypozyczone_ksiazki {
	
	@Id
	@GeneratedValue
	private long id;
	private String Data_od;
	private String Data_do;
	@OneToOne
	private Uzytkownik uzytkownik;
	
	
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getData_od() {
		return Data_od;
	}
	public void setData_od(String data_od) {
		Data_od = data_od;
	}
	public String getData_do() {
		return Data_do;
	}
	public void setData_do(String data_do) {
		Data_do = data_do;
	}
	public Uzytkownik getUzytkownik() {
		return uzytkownik;
	}
	public void setUzytkownik(Uzytkownik uzytkownik) {
		this.uzytkownik = uzytkownik;
	}
	

	
	

}

Adres.java

package pakiet.domain;


import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.GenerationType;
@Entity

public class Adres {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private long id;
	private String Ulica;
	private String Numerdomu;
	private String Miasto;
	private String KodPocztowy;
	@OneToOne(mappedBy = "adres")
	private Uzytkownik uzytkownik;
	
	
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getUlica() {
		return Ulica;
	}
	public void setULica(String ulica) {
		Ulica = ulica;
	}
	public String getNumerdomu() {
		return Numerdomu;
	}
	public void setNumerdomu(String numerdomu) {
		Numerdomu = numerdomu;
	}
	public String getMiasto() {
		return Miasto;
	}
	public void setMiasto(String miasto) {
		Miasto = miasto;
	}
	public String getKodPocztowy() {
		return KodPocztowy;
	}
	public void setKodPocztowy(String kodPocztowy) {
		KodPocztowy = kodPocztowy;
	}

	

}

Klasa do wyszukiwania:

package pakiet;

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

import pakiet.domain.Uzytkownik;

public class FindAndModify {

	public static void main(String[] args) {
		EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("myDatabase");
		EntityManager entityManager = entityManagerFactory.createEntityManager();
		
		entityManager.getTransaction().begin();

		Uzytkownik uzytkownik = entityManager.find(Uzytkownik.class, 1L);
		System.out.println(""+uzytkownik.getUser());
		System.out.println(""+uzytkownik.getAdres());
		System.out.println(""+uzytkownik.getWypozyczone_ksiazki());

		

		
		entityManager.getTransaction().commit() ;

		
		entityManager.close();
		entityManagerFactory.close();
		

	}

}

Po uruchomieniu klasy FindAndModify konsola wyświetla dane:

Jan
pakiet.domain.Adres@5cf87cfd
pakiet.domain.Wypozyczone_ksiazki@76075d65

a moja baza zawiera takie dane:

Uzytkownik:

 # id, Password, User, adres_id
'1',       'afshhs', 'Jan',        '1' 


Adres:

# id, KodPocztowy, Miasto, Numerdomu, Ulica
'1', '57-100',           'Wroclaw', '10',           'Warszawska'


Wypozyczone_ksiazki:

# id, Data_do, Data_od, uzytkownik_id
'1',     '15 maja', '15 czerwca', '1'

Chodzi o to, żeby po wpisaniu komendy z pliku FindAndModify

		Uzytkownik uzytkownik = entityManager.find(Uzytkownik.class, 1L);
		System.out.println(""+uzytkownik.getUser());
		System.out.println(""+uzytkownik.getAdres());
		System.out.println(""+uzytkownik.getWypozyczone_ksiazki());

Konsola wyświetliła:
Jan
(konkretny adres, id adresu lub np. nazwę miasta - jak to ustawić?)
(jw. konkretną informację z tabeli wypozyczone_ksiazki lub calą informację z tej kolumny)

Dziękuję z góry za wszelką pomoc

2

Bierzesz się za pisanie apki webowej, a nie masz ogarniętych podstaw Javy SE.

Musisz nadpisać metodę toString() w klasach, które chcesz printować.

ps jesteś na początku pisania tego CRUDa, więc raz dwa zmieniaj to na język angielski. Nie używaj polskiego.

0

Dziękuję za pomoc :)

1

Kolejna sprawa - relacja Uzytkownik - Wypozyczone_ksiazki. Niby książki w liczbie mnogiej, czyli użytkownik może wypożyczyć kilka książek, a jednak masz OneToOne. Zdecyduj się :)

0

No tak, poprawię.

Dodałem w klasie Adres,java metodę

		 public String toString()
{
		        return Miasto;
		    }

Czy da się zrobić żeby wyświetlało wszystkie tabele a nie tylko Miasto?

1

Słowo klucz: nadpisać.
Próbowałeś szukać w googlach? :)
Nawet IDE jest w stanie wygenerować za Ciebie toString() po kilku kliknięciach.

https://www.baeldung.com/java-tostring

0

Dzięki, a mógłbyś mi jeszcze pomóc jak zdefiniować metodę FindBy?

0

FindBY co?

0

findByID oraz findByProperties(property, value) i jeszcze listAll()

0

nie chcę gotowca tylko pomocy jak to zdefiniować.

1

W swoim poście wyżej użyłeś już metody find, gdzie podajesz klasę oraz id. Wykorzystaj to.

Jeden z pierwszych linków z googlea: https://www.objectdb.com/java/jpa/persistence/retrieve

0

Mam taki kod:

		TypedQuery<Uzytkownik> query = entityManager.createQuery("select e from Uzytkownik e where e.User= 'Adam' ", Uzytkownik.class);
		List<Uzytkownik> uzytkownicy = query.getResultList();
		for (Uzytkownik uzytkownik : uzytkownicy)
		{
		System.out.println(uzytkownik.getUser());
		System.out.println(uzytkownik.getAdres());
		}

pojawia się taki błąd:
the type list is not generic it cannot be parameterized with arguments <Uzytkownik>

co jest źle?

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

import antlr.collections.List;
import pakiet.domain.Uzytkownik;
1

Zmień to

mancher napisał(a):
import antlr.collections.List;

na

import java.util.List
0

A jak wykonać zapytanie Query w JPQL aby wyszukiwało dane z dwóch tabel?

0

PRO TIP: wszystko co potrzebujesz zrobiono przez Tobą tysiące razy, spora część tego jest udokumentowana w internecie. Wpisz JPQL query join :)

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