Я портирую слой Dao из KodoJDO в Hibernate.
Я храню свои меню в базе данных и, основываясь на правах пользователя, сокращаю локальную копию, чтобы отобразить только то, что пользователю разрешено делать.
Когда я делал это в KodoJDO, мне нужно было сделать объект, который я обрезал, переходным, потому что я не хотел записывать изменения обратно в БД.
Я не вижу эквивалентной функции в Hibernate. Есть один? Как я могу сохранить эти изменения от записи обратно в БД.
Вот функция обрезки.
public void prune(Collection<Entitlement> ents)
{
Session session=PersistenceManager.getManager();
// Rewrite----------------------------------
//session.makeTransient(this);
for (Iterator<Leaf> iter = leafs.iterator(); iter.hasNext();)
{
Leaf l = (Leaf) iter.next();
if(!l.isAllowed(ents))
{
iter.remove();
}
}
for (Iterator<Branch> iter = branches.iterator(); iter.hasNext();)
{
Branch b = (Branch) iter.next();
if(b!= this)
{
b.prune(ents);
}
if (b.hasNoChildren())
{
iter.remove();
}
}
}
Комментарий к ответам. Я принял тот, который был наиболее полным, но ответы Скаффмана и Аффе также были ценными.