Cześć!
Od pewnego czasu robię dość spory projekt i mam pewien problem, z którym nie umiem sobie odpowiednio poradzić. Projekt zakłada ewidencje magazynową, a problem pojawia się przy tworzeniu tzw. przekazań pewnych pozycji z jednego magazynu na inny. Do tego celu stworzyłem tabele w bazie danych, która - mówiąc w wielkim skrócie - ma przechowywać m.in. id magazynu źródłowego i docelowego. O ile z identyfikatorem magazynu docelowego nie mam problemu, to problem tkwi właśnie przy id magazynu źródłowego (aktualnego, w momencie tworzenia rekordu "przekazania"). Obecnie wygląda to tak:
public void createTransmissionHistory(
TransmissionHistory transmissionHistory, Long equipmentId,
Long sourceMagazineId, Long destMagazineId) {
Equipment equipment = equipmentDao.get(equipmentId);
Magazine sourceMagazine = magazineDao.get(sourceMagazineId);
Magazine destMagazine = magazineDao.get(destMagazineId);
transmissionHistory.setEquipment(equipment);
transmissionHistory.setSourceMagazine(sourceMagazine);
transmissionHistory.setDestMagazine(destMagazine);
transmissionHistoryDao.create(transmissionHistory);
}
W takiej wersji to działa aczkolwiek na sztywno w parametrze wywołania tej metody muszę podać sourceMagaineId. Sam Magazyn jako typ to kolekcja, a mówiąc bardziej konkretnie - jest to Lista, która jest dostępna oczywiście z poziomu obiektu Equipment. Troche jest to zagmatwane, wiem, ale lepiej nie jestem w stanie tego wytłumaczyć. Generalnie id magazynu źródłowego pojawia się w tabeli Equipment jako podrzędna kolumna sygnalizująca gdzie dany sprzęt obecnie się znajduje. Do momentu stworzenia "przekazania" ta wartość (w tabeli Equipment) nie ma prawa się zmienić. W tym wypadku wartość, która mnie interesuje (jako sourceMagazineId) to identyfikator magazynu z tabeli Equipment i chciałbym aby był pobierany automatycznie, a nie statycznie podawany w parametrze metody tworzącej przekazanie.
Jedyne co mi przychodzi do głowy to zmodyfikowanie tej metody w taki sposób:
public void createTransmissionHistory(
TransmissionHistory transmissionHistory, Long equipmentId, Long destMagazineId) {
Equipment equipment = equipmentDao.get(equipmentId);
Magazine destMagazine = magazineDao.get(destMagazineId);
transmissionHistory.setEquipment(equipment);
transmissionHistory.setSourceMagazine(equipmentDao.get(equipment).getMagazine().get(0));
transmissionHistory.setDestMagazine(destMagazine);
transmissionHistoryDao.create(transmissionHistory);
}
Macie może jakieś pomysły?