Na podobny problem jsem pouzil toto reseni
v domenovem objektu jsem zadal aby se dana polozka nemenila (update =
false) (mapovani pomoci xDoclet)
/**
* Vrátí cas zpracovani
* @hibernate.property
* column = "lp_processed_time"
* insert = "false"
* update = "false"
* not-null = "false"
* type = "timestamp"
*/
public Timestamp getProcessedTime() {
return processedTime;
}
a napsal jsem si specialni metodu do DAO objektu, ktera provede update
teto polozky, ale nezmeni se cislo verze a v ni se provadi
Query q = getSession().createQuery("update ModelX"
+ " set lp_processed_time = :lp_processed_time"
+ " where lp_id = :id");
q.setTimestamp("lp_processed_time",
TimeUtils.getActualTimestamp());
q.setLong("id", model.getId());
int res = q.executeUpdate();
if (res != 1) {
throw new
EntityNotFoundException(getServiceObject().getLocalizedText(MessagesKeys.common_exceptions_entityNotFound),
model);
}
getSession().flush();
Takto muzu s danou entitou pracovat pohodlne v aplikaci a cist i
processedTime, jedine co nemuzu je provest update nastaveneho casu
pomoci save, ale jen touto spec metodou.
Jaroslav Hurdes
Martin Beránek napsal(a):
Zdravím,
narazil jsem na následující problém:
Mám entitu Storage, která uchovává nastavení a stav logického úložného
prostoru. Tahle entita je velmi často updatována (co sekundu) kvůli položce
"used", což je velikost zaplnění. To však úplně zablokovalo její editaci z
webového rozhraní (entita je verzována).
Napadlo mě vytvořit novou entitu StorageUsed a tam tuhle property vytáhnout. To
zřejmě bude fungovat, ale nedaří se mi rozumným způsobem zapsat
mapování do hbm.xml (java entity generujeme). Vztah one2one se má "simulovat" přes
mane-to-one s unique="true", ale tohle neumí inverse, takže pak mi
vazbu "drží" Storage a ne StorageUsed. Chtěl bych, aby vazbu držela StorageUsed
už kvůli jednoduchému update ze současného stavu (systém je v provozu)
a taky z logiky věci.
Nějaké nápady? Díky za pomoc
--
Martin Beránek
ICZ a.s.