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

0

Cześć,

Mam pytanie na temat działania asoscacji w hibernate.

Zrobiłem asoscjacje na dwóch 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.

1

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);
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.

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.

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

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