Hibernate asoscjajac, nowy obiekt w relacji z juz istniejącym?

Odpowiedz Nowy wątek
2015-02-26 10:03

Rejestracja: 12 lat temu

Ostatnio: 6 dni temu

0

Cześć,

Mam pytanie na temat działania asoscacji w hibernate.

Zrobiłem asoscjacje na dwuch tabelach z relacją jeden do wielu:

@Entity
@Table(name = "Uzytkownik")
public class Uzytkownik implements Serializable {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "ID")
private int id;
@Column(name = "Imie")
private String imie;
@Column(name = "Nazwisko")
private String nazwisko;
@Column(name = "Wiek")
private int wiek;

@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "AdresID")
private Adres adres;
@Entity
@Table(name = "Adres")
public class Adres {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "ID")   
int id;
@Column(name = "Adres")
private String adres;

Jak widzicie mamy tutaj relacje po kolumni AdresId z tebeli Uzytkownik i ID w tabeli Adres.
Działa to poprawnie przy dodawaniu nowych obiektów w przypadku obu tabel:

Adres adres = new Adres();
        adres.setAdres("New Orlean");

        Uzytkownik user = new Uzytkownik();
        user.setImie("Adam");
        user.setId(20);
        user.setAdres(adres);

        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx=null;
        session.beginTransaction();
        session.update(user);
        session.getTransaction().commit();
        session.close();

I tutaj pojawia sie moja niewiedza, jak dodać nowy obiekt do tabeli Uzytkownicy ale z relacja do istniejącego obiektu w tabeli Adres? Nie che tworżyć nowego obiektu w tabeli adres a zrobic relacje do już istniejącego.

Z góry dzięki.

Może to głupie pytanie ale dopieru poznaje Hibernate.

Pozostało 580 znaków

2015-02-26 10:14

Rejestracja: 9 lat temu

Ostatnio: 23 godziny temu

Musisz wyszukać interesujący obiekt adres z bazy danych np. za pomocą find albo jakiegoś własnego zapytania i przypisać po prostu tak jak wyżej masz

user.setAdres(adres);
edytowany 1x, ostatnio: olek1, 2015-02-26 10:14

Pozostało 580 znaków

2015-02-26 10:44

Rejestracja: 12 lat temu

Ostatnio: 6 dni temu

0

Ok, wymysliłem cos takiego:

 Adres adres = (Adres) session.get(Adres.class, 13); 

 Uzytkownik user = new Uzytkownik();
 user.setImie("Test");
 user.setId(30);
 user.setAdres(adres);
 session.save(user);

 session.getTransaction().commit();
 session.close();

Gdzie akurat w tym przypadku 13 to wartośc ID w tabeli Adres. Dzięki za podpowiedz.

Pozostało 580 znaków

2015-02-26 10:58

Rejestracja: 9 lat temu

Ostatnio: 23 godziny temu

0

No zadziała, ale akurat wyszukiwanie po id nie jest dobrym pomysłem, tak samo ustawianie ID u usera samodzielnie, lepiej jakby generowała to jakaś sekwencja.

Pozostało 580 znaków

2015-02-26 11:32

Rejestracja: 12 lat temu

Ostatnio: 6 dni temu

0

Dla potomnych:

Query q= session.createQuery("from Adres a where a.adres =:fname");
        q.setString("fname","Berlin");
        List result = q.list();

Dzieki i pozdrawiam

edytowany 2x, ostatnio: Eiten, 2015-02-26 12:13

Pozostało 580 znaków

Odpowiedz

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