Czesc, mam taki troche zawily problem. A wlasciwie sklada sie na niego kilka elementow.
Do programu X przychodza dane. Po ich normalizacji wstawiane sa one do klas typu XEntity. Do programu po jakims czasie t moga przyjsc znow te same dane (obiekt klasy XEntity jest rowny drugiemu XEntity jesli jego pola sa rowne co do wartosci). Klasa XEntity wyglada mniej wiecej tak:
public lass XEntity implements Serializable{
@Id
private int id;
private String name;
private String surname;
private String field1;
private String field2;
private int field3;
//gettery i settery
}
Oto moje pytania/problemy:
-
Zalozmy ze mamy juz liste obiektow typu XEntity gotowa do wstawienia do bazy. Jak (i czy) przy pomocy Hibernate moge to zrobic aby nie wstawial mi rekordow ktore juz istnieja? Nie wyobrazam sobie robic tego na zasadzie ze dla kazdego XEntity bede robila selecta.. saveOrUpdate sie tutaj nie sprawdzi, prawda? Bo z tego co rozumiem to nie dziala tak ze on sobie sprawdza to z baza, tylko chyba przypisuje ten obiekt do sesji i sprawdza z tym co jest w sesji.
-
Moim kluczem glownym na tabeli x w bazie jest id. "Biznesowym" kluczem jest jednak para imie+nazwisko (nie, nie moge zrobic tak aby byl tam klucz na bazie, ja w ogole nic nie moge robic na bazie). Tzn - jesli mamy XEntity ktore ma:
imie = jan
nazwisko = kowalski
to czy ja moge jakos hibernate'a zmusic aby dla kazdego obiektu typu XEntity sprawdzil czy istnieje ta para - jesli istnieje - to by zrobil update (ale tylko jesli ktores z pozostalych pol sie rozni od tego co jest w bazie) lub pominal wstawianie (jesli pozostale pola sa takie same)?
- W jaki sposob moge miec w programie hmm.. aktualny stan tabeli? Czy jest w ogole sens robienia czegos takiego? Czy jesli tabela mi sie rozrosnie to program zamuli albo cos?
bede wdzieczna za wszystkie sugestie!
pzdr,
misty