mam object A
który mapuje table A
w DBaktualizowania pola obiektu w hibernacji
class A {
Integer id;
String field2,field2;field3 ,... fieldN;
//lots of other attribute
}
Teraz chcę napisać API DAO że tylko aktualizuje pojedynczy podejście field.One jest, że mogę najpierw załadować obiekt następnie zmienia atrybut mi potrzeba, a następnie użyć połączyć API
//start transcation
A a = session.load(A.class, id);
A.setfieldP(newValue)
session.merge(A)
//commit transcation
teraz, jeśli używam następujący kod
//start transcation
A a = new A();
a.setId(id); //set a id by which object A exists in DB
A.setfieldP(newValue)
session.merge(A)
//commit transaction
Teraz drugie podejście do wszystkich pól, z wyjątkiem id i pólP, jest ustawione na wartość null
1) Czy istnieje inne podejście?
2) Czy mogę używać aktualizacji zamiast scalania?
Prawdopodobnie już to wiesz, ale saveOrUpdate działa z odłączonymi obiektami. Jedyny raz, gdy napotkasz na kłopoty z nim, jest wtedy, gdy istnieje istniejący obiekt o tym samym identyfikatorze dołączony do sesji. –
'saveOrUpdate' zaktualizuje wartości do istniejącego obiektu w db (+1) – bluefoot
@Russ Sanwald: W drugim podejściu, co próbuję zrobić, chcę zaktualizować obiekt. Teraz za aktualizację nie chcę go pobrać to z db, a następnie aktualizuję, zamiast tego tworzę nowy obiekt A, ustaw jego klucz podstawowy i poleN, a następnie aktualizuję. Ustawiam klucz podstawowy, ponieważ chcę zaktualizować obiekt za pomocą klucza podstawowego = X (zakładając, że obiekt o identyfikatorze x jest już obecne w DB i ustawiam fieldN tak, jak chcę go zaktualizować.Nie zmieniam klucza głównego, ale moim celem jest zmiana wartości pola N obiektu A za pomocą Id = X – akshay