Uma outra forma de fazer isso é utilizar subpropriedades dos seus beans. Exemplo
Code:
class Principal {
SubItem subItem;
// getters e setters
}
class SubItem {
Item item;
//getters e setters
}
class Item {
Sessao sessao;
//getters e setters
}
class Sessao {
// getters e setters
}
Se você estiver fazendo a tela de Principal por exemplo voce pode utiizar
Code:
<n:comboReloadGroup useAjax="true">
<t:property name="subItem.item.sessao">
<t:property name="subItem.item">
<t:property name="subItem">
</n:comboReloadGroup>
Quando voce editar o principal todos os combos estarão carregados.
Nesse caso cada entidade tem que ser uma referencia para a outra (@ManyToOne) voce deve fazer DAOs para todas elas.
Sobrescreva o método updateEntradaQuery do PrincipalDAO para fazer join (fetch) com item e sessao (o NEO carrega os beans se eles não estiverem carregados do banco mas não é recomendável já que várias consultas ao banco seriam necessárias. Se performance não é um problema muito importante voce pode querer nao sobrescrever o updateEntradaQuery)
Na versão 3.3.14 você terá que verificar se o subItem possui id antes de salvar o principal. Isso porque se estiver selecionada uma Sessao voce terá um principal com um subItem que tem um Item que tem uma Sessao. Mas o subItem nao terá chave (id) se nenhum subItem tiver sido selecionado. O Hibernate soltará uma exceção TransientObjectException caso o subItem nao receba o tratamento necessário. Se o subItem for obrigatório não terá nenhum problema.
Na versão 3.3.15 se nenhum subItem tiver sido selecionado o subItem será nulo. Então não terá problemas com o Hibernate