Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Hibernate - problem sa @OneToOne vezom

[es] :: Java :: Hibernate - problem sa @OneToOne vezom

[ Pregleda: 2616 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

boky84
Novi sad

Član broj: 125284
Poruke: 18
212.200.65.*



Profil

icon Hibernate - problem sa @OneToOne vezom23.02.2010. u 13:53 - pre 171 meseci
Imam nedoumicu kako da resim povezivanje dva Entity-ja. Naime, trebalo bih da povezem entity 'skola' i entity 'direktor'. Logicno mi je da u tu svrhu koristim vezu @OneToOne jer skola treba da ima samo JEDNOG direktora a direktor treba da bude na toj funkciji u samo jednoj skoli. Ono sto od funkcionalnosti treba da podrzim jeste da mogu da nakon perzistencije objekata pomenutih entity-ja da vidim ko je direktor odredjene skole i da za odredjenu skolu mogu da vidim ko je direktor. Svi predlozi za resavanje ovog problema su dobroosli. Unapred hvala...
 
Odgovor na temu

del-boy
Bojan Delić
Beograd

Član broj: 9330
Poruke: 1089

Sajt: www.delic.in.rs


+21 Profil

icon Re: Hibernate - problem sa @OneToOne vezom23.02.2010. u 14:16 - pre 171 meseci
Citat:
da vidim ko je direktor odredjene skole i da za odredjenu skolu mogu da vidim ko je direktor


Zar ovo nije ista stvar? Pretpostaljvam da si hteo da kažeš "da vidim ko je direktor određene škole i koje škole je direktor određena osoba"?

U svakom slučaju, nakon poverzivanja One-To-One vezom, Hibernate ti daje da pristupiš tim entitetima kao objektima, nakon što ih dovičeš iz baze. Ništa specijalno ne treba raditi, samo napravi metode getDirector u klasi School i getSchool u klasi Director i to je to... Pored toga treba postaviti anotacije pravilno sa obe strane, fetch, cascade, bla... Daj primer koda što si uradio, pošto ne znam šta tačno pitaš :)
 
Odgovor na temu

boky84
Novi sad

Član broj: 125284
Poruke: 18
212.200.65.*



Profil

icon Re: Hibernate - problem sa @OneToOne vezom23.02.2010. u 18:14 - pre 171 meseci
Da, to sam hteo da kazem. :-) Lapsus...

A evo koda:

// Direktor
@Entity
public class Direktor implements Serializable {
@Id
@GeneratedValue(strategy=IDENTITY)
@Column(name="id", nullable = false, unique=true)
private Long id;

@Column(name="ime", unique=false, nullable=false)
private String ime;

@Column(name="prezime", unique=false, nullable=false)
private String prezime;

@Column(name="telefon", unique=false, nullable=true)
private String telefon;

@Column(name="email", unique=false, nullable=true)
private String email;

@OneToOne
@JoinColumn(name="skola_id", referencedColumnName="id", nullable=false)
private School school;

public Direktor() {
super();
}

public Long getId() {
return id;
}

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

public String getIme() {
return ime;
}

public void setIme(String ime) {
this.ime = ime;
}

public String getPrezime() {
return prezime;
}

public void setPrezime(String prezime) {
this.prezime = prezime;
}

public String getTelefon() {
return telefon;
}

public void setTelefon(String telefon) {
this.telefon = telefon;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public void setSchool(School school) {
this.school = school;
}

public School getSchool() {
return school;
}
}


// Skola
@Entity
public class School implements Serializable {
@Id
@GeneratedValue(strategy=IDENTITY)
@Column(name="id", nullable = false, unique=true)
private Long id;

@Column(name="ime", unique = false, nullable = false)
private String ime;

@Column(name="adresa", unique = false, nullable = false)
private String adresa;

@OneToOne(cascade={MERGE, PERSIST, REFRESH})
@JoinColumn(name="direktor_id", referencedColumnName="id", nullable=true)
private Direktor direktor;

public School() {
super();
}

public Long getId() {
return id;
}

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

public String getIme() {
return ime;
}

public void setIme(String ime) {
this.ime = ime;
}

public String getAdresa() {
return adresa;
}

public void setAdresa(String adresa) {
this.adresa = adresa;
}

public Direktor getDirektor() {
return direktor;
}

public void setDirektor(Direktor direktor) {
this.direktor = direktor;
}

public String toString() {
return "Skola - ID: " + getId()
+ "\nNaziv skole: " + ime
+ "\nAdresa: " + adresa;
}
}

E sad, kako da postavim pravilno te anotacije? Moze primer i objasnjenje...
 
Odgovor na temu

del-boy
Bojan Delić
Beograd

Član broj: 9330
Poruke: 1089

Sajt: www.delic.in.rs


+21 Profil

icon Re: Hibernate - problem sa @OneToOne vezom24.02.2010. u 00:03 - pre 171 meseci
Hm, pa nema pravilno... Postavljaš kako tebi treba... Na primer, ne mogu ja da ti kažem da li da se iz baze učita direktor kad učitaš školu ili tek kad pokušaš da pristupiš tom polju (fetch EAGER ili LAZY)... Isto sam moraš da odlučiš da li želiš da, na primer, kad merge-uješ školu da se i direktor merge-uje (cascade MERGE) i obrnuto.

Ovaj kod koji si ostavio mi liči da je ok (nisam siguran za imena anotacija, ne pamtim te stvari, ali ako se kompajlira to bi trebalo da je to). E sad, kad iz baze pokupiš školu sa getDirektor() ćeš dobiti direktora te škole, što je i bilo početno pitanje. Jesi li probao to? Radi? Ne radi? I dalje ne znam u čemu je tačno problem :)
 
Odgovor na temu

boky84
Novi sad

Član broj: 125284
Poruke: 18
212.200.65.*



Profil

icon Re: Hibernate - problem sa @OneToOne vezom24.02.2010. u 13:29 - pre 171 meseci
Anotacije sam postavio na sledeci nacin:

// Skola
@OneToOne(cascade={MERGE, PERSIST, REFRESH}, fetch=EAGER)
@JoinColumn(name="direktor_id", referencedColumnName="id", nullable=false)
private Direktor direktor;

// Direktor
@OneToOne(cascade={MERGE, PERSIST, REFRESH}, fetch=EAGER)
@JoinColumn(name="skola_id", referencedColumnName="id", nullable=false)
private School school;

Da li je ovo OK? Hocu da mi se odmah iz baze ucita i direktor kada dobavljam skolu a isto tako hocu da mi se odmah ucita i skola kada dobavlam direktora (to sam opisao sa ovim fetch=EAGER, zar ne?)

Eh, sad, sta se desava - kada iz baze pokusam da dobavim skolu to prodje OK (mogu da da pristupim i atributu direktor) ali kada iz baze dobavim direktora tada mi je atribut skola null! :( U cemu je problem, gde gresim?
 
Odgovor na temu

[es] :: Java :: Hibernate - problem sa @OneToOne vezom

[ Pregleda: 2616 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.