Cidade e Estados?

Esta é única maneira de fazer isso ?

package br.com.serjaum.mb;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.model.SelectItem;

import org.hibernate.Session;

import br.com.serjaum.dao.CidadeDAO;
import br.com.serjaum.dao.EstadoDAO;
import br.com.serjaum.dao.HibernateUtil;
import br.com.serjaum.modelo.Cidade;
import br.com.serjaum.modelo.Estado;

public class RegiaoMB implements Serializable {

	private static final long serialVersionUID = -4281390476508498320L;

	private List<SelectItem> cidades = new ArrayList<SelectItem>();
	
	private Estado estado = new Estado();

	private Cidade cidade = new Cidade();
	
	public List<SelectItem> getEstados(){
		Session session = HibernateUtil.currentSession();
		EstadoDAO dao = new EstadoDAO(session, Estado.class);
		
		List<Estado> lista = dao.list();
		
		List<SelectItem> itens = new ArrayList<SelectItem>(lista.size());
		
		for(Estado s : lista){  
			itens.add(new SelectItem(s.getId(), s.getNome()));
		}
		
		return itens;
	}
	
	public void actionCarregaCidades(){
		System.out.println("id do estado selecionado >>> " + this.estado.getId());

		this.cidades = this.getCidadesByEstado();
	}
	
	public List<SelectItem> getCidadesByEstado(){  
		Session session = HibernateUtil.currentSession();
		
		CidadeDAO dao = new CidadeDAO(session, Cidade.class);

		List<Cidade> cidades = dao.getCidadesByEstado(this.estado.getId());

		List<SelectItem> items = new ArrayList<SelectItem>(cidades.size());
		
		for(Cidade c : cidades){
			items.add(new SelectItem(c.getId(), c.getNome()));  
		}
		
		return items;
	}

	public List<SelectItem> getCidades() {
		return cidades;
	}

	public void setCidades(List<SelectItem> cidades) {
		this.cidades = cidades;
	}

	public Estado getEstado() {
		return estado;
	}

	public void setEstado(Estado estado) {
		this.estado = estado;
	}

	public Cidade getCidade() {
		return cidade;
	}

	public void setCidade(Cidade cidade) {
		this.cidade = cidade;
	}
}