Witam
Mam takich kilka pytań czysto teoretycznych.
**I )**Chodzi mi o dwukierunkową relację jeden do wielu.
Otóż jak wiadomo w takiej relacji stroną właścicielską jest ta encja która nie zawiera kolekcji.
Ja sobie zrobiłem taki mały trick. Mam pierwszą klasę która zawiera kolekcje
@OneToMany(cascade=CascadeType.ALL , mappedBy="person" , fetch=FetchType.EAGER)
private List<Info> infos = new ArrayList<Info>();
natomiast w 2 klasie mam :
@ManyToOne(optional=false ,cascade= CascadeType.ALL)
@JoinColumn(name = "personid", referencedColumnName="id")
private Person person;
Wszystko ładnie i pięknie. Chcę jednak mieć możliwość przy utrwalaniu encji person utrwalić wszystkie elementy kolekcji info. Więc wykonałem takie 2 małe tricki :
- W konstruktorze :
public Person(String name, String lastName, List<Info> infos){
this.name = name;
this.lastName = lastName;
for(Info i : infos){
i.setPerson(this);
}
this.infos = infos;
}
- utworzyłem podobną metodę która iteruje liste...
Tylko zastanawiam się czy A) To jest poprawne B) czy potrzebne jest this.infos = infos (po utrwaleniu encji automatycznie powinienem odczytywać te wartości )??
II) Moje 2 pytanie jest też z tej samej beczki. Chodzi mi o tworzenie encji, czasami przeglądam kod innych osób i przy tworzeniu encji dodają one generowanie id choćby w ten sposób :
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
następnie tworzą konstruktora oraz settera dla tego id:
public Person(Integer id , String name .......){
this.id = id;}
//settter
Może to jest głupie pytanie, ale nie bardzo rozumiem dlaczego ? przecież id jest generowane przez bazę więc po co dawać możliwość programowej zmiany tej wartości ??
III)
I moje ostatnie pytanie też może dziwne. Zauważyłem, że niektórzy ale nie wszyscy programiści tworząc encję piszą metodę equals która porównuje wszystkie pola danej encji. Natomiast ja , oraz jak widziałem inni, tworzę metodę equals w JEE na takiej zasadzie, że porównuję tylko klucze. Wychodząc z założenia, że klucz musi być unikatowy... .
Czy dobrze rozumuję ??
Takie o to myśli mnie dręczą, niby dla niektórych proste ale jednak chciałbym mieć pewność czy dobrze rozumuję.