Hibernate em aplicações desktop com swing

Boa tarde pessoal,

Como eu faço o gerenciamento de sessão do hibernate em um aplicação swing. Tenho um pequeno cadastro de pessoa, onde ao informa os dados do endereço seleciono a cidade, a qual já está cadastrada no banco. Ou seja, eu informo o código da cidade e assim é retornado a cidade correspondente aquele código. No entanto quando vou gravar os dados ele lança Uma Exceção: TransienteObjectException. Pelo que eu entendi ele tenta salvar um objeto não persistente, que não esta gravado no banco. Depois de bater cabeça eu percebi que é por causa da sessão, ou seja, a sessão que busca a cidade no banco de dados é diferente da sessão que faz a inserção no cadastro da pessoa. Depois disso, fiz uma pequena classe com Metodo main e utilizando uma unica sessão ele funcionou sem problema.

O problema e que quando passo para o swing fico muito perdido, pois toda vez que é feita uma busca no banco da inserção propriamente dita, é aberta uma sessão e a mesma e fechada no final.

Dessa formam gostaria de uma segestão de como realizar o gerenciamento dessas sessão de forma a evitar esses erros.

Desde já agradeço.

Na verdade deve ser porque o objeto tem relacionamento oneToMany ou algo parecido, que utiliza lazy loading, com isso a sessão que mantinha o proxy do relacionamento foi fechado, ao tentar acessa-lo tu leva uma exception.
Minhas aplicações Java + hibernate com swing eu abro 1 sessão no começo da aplicação e só fecho ao fechar o programa ou seja, o cliente sempre está com 1 sessão aberta e mantem a mesma até o termino da aplicação.