Uma ajudinha usando persistencia no hibernate usando heraça

0 respostas
G

Alguem poderia mim ajudar a implementar o metodo salvarAluno da classe AlunoController ou vê o que esta faltando.
E como eu faço nesse caso para criar um metodo na classe AlunoController par pegar os dados do bd e colocar numa pagina como tabela(pois são dados de tres tabelas pessoa, aluno e endereco)?

Obs. Esse modelo e do tutorial hibernate 3 que tem no site, eu estou usando tipo de mapeamento de tabela por Sub-Classe. E quando eu executo o codigo da um error. Classe AlunoController:
public class AlunoController {
	private AlunoDao alunoDao = DaoFactory.getAlunoDao();
	private DataModel model;
	private Aluno aluno;
        private Endereco endereco;
	
	public String novoAluno() {
		aluno = new Aluno();
                endereco = new endereco();
		return "nvAluno";
	}

	public String salvarAluno() {
		try {
			if (alunoDao.recuperar(aluno.getId()) == null) {
			       aluno.setEndereco(endereco); 
                               alunoDao.salvar(aluno);
			} else
				alunoDao.atualizar(aluno);

			return "slAluno";
		} catch (Exception e) {
			e.printStackTrace();
			return "fcAluno";
		}

	}
...
Classe Pessoa:
public class Pessoa implements Serializable{
	
	private int id;
	private String nome;
	private String email;
	private String telefone;
	private Endereco endereco;
...
get e set
}
Classe Endereço:
public class Endereco implements Serializable{
	
	private int id;
	private String rua;
	private int numero;
	private String bairro;
	private String cidade;
	private String estado;
	private String complemento;
	private String cep;
	private Pessoa pessoa;
...
get e set
}
Classe Aluno:
public class Aluno extends Pessoa implements Serializable{
	private String matricula;
	private Collection turmas;
... 
get e set
}
Pessoa.hmb.xml:
<hibernate-mapping package="model">
  <class name="Pessoa" table="pessoa">
  	<id name="id" column="id">
  		<generator class="native">
  			<param name="sequence">seq_pessoa</param>
  		</generator>
  	</id>
  	<property name="nome"></property>
  	<property name="email"></property>
  	<property name="telefone"></property>
  	<one-to-one name="endereco" class="Endereco" cascade="save-update"></one-to-one>
  </class>
</hibernate-mapping>
Aluno.hbm.xml:
<hibernate-mapping package="model">
	<joined-subclass name="Aluno" extends="Pessoa" table="aluno">
		<key column="pessoa_id" />
		<property name="matricula" />
		<set name="turmas" table="turma_has_aluno" inverse="false">
			<key column="aluno_pessoas_id" />
			<many-to-many class="Turma" column="turma_id" />
		</set>
	</joined-subclass>
</hibernate-mapping>
classe AlunoDao:
public class AlunoDao extends AbstractDao<Aluno, Integer> {
	private static AlunoDao instancia = null;
	
	private AlunoDao(){
		super(Aluno.class);
	}
	protected static AlunoDao getInstancia(){
		if(instancia == null)
			instancia = new AlunoDao();
		return instancia;
	}
}
classe AbstractDao:
public abstract class AbstractDao<Tipo, TipoID extends Serializable> implements InterfaceDao<Tipo, TipoID>{
	protected Session session;
	protected Transaction tx;
	protected Class classe;
	
	protected AbstractDao(Class classe){
		this.classe = classe;
	}
	@Override
	public void atualizar(Tipo obj) throws Exception {
		...
	}
	@Override
	public void excluir(Tipo obj) throws Exception {
		...
	}
	@Override
	public List<Tipo> listarTodos() throws Exception {
		...
	}
	@Override
	public Tipo recuperar(TipoID id) throws Exception {
		....
	}
	@Override
	public void salvar(Tipo obj) throws Exception {
		...
	}
}
pagina novoAluno:
<f:view>
	<h2>Preenchar os Campos:</h2>
	<h:form>
		<h:panelGrid columns="2" border="0">
			<h:outputText value="Matricula"/>
			<h:inputText id="matricula" value="#{aluCont.aluno.matricula}"/>
			<h:outputText value="Nome:" />
			<h:inputText id="nome" value="#{aluCont.aluno.nome}" size="30" />
			<h:outputText value="E-Mail:" />
			<h:inputText id="email" value="#{aluCont.aluno.email}" size="30" />
			<h:outputText value="Telefone:" />
			<h:inputText id="telefone" value="#{aluCont.aluno.telefone}"
				size="11" />
			<h:outputText value="Rua:" />
			<h:inputText id="rua" value="#{aluCont.endereco.rua}" size="25" />
			<h:outputText value="Numero:" />
			<h:inputText id="numero" value="#{aluCont.endereco.numero}" size="3"/>
			<h:outputText value="Bairro:" />
			<h:inputText id="bairro" value="#{aluCont.endereco.bairro}" size="15" />
			<h:outputText value="Cidade:" />
			<h:inputText id="cidade" value="#{aluCont.endereco.cidade}" size="15" />
			<h:outputText value="Estado:" />
			<h:inputText id="estado" value="#{aluCont.endereco.estado}" size="15" />
			<h:outputText value="Complemento:" />
			<h:inputText id="complemento" value="#{aluCont.endereco.complemento}"
				size="25" />
			<h:outputText value="Cep:" />
			<h:inputText id="cep" value="#{aluCont.endereco.cep}" />
		</h:panelGrid>
		<h:commandButton value="Limpar" type="reset" />
		<h:commandButton value="Gravar" action="#{aluCont.salvarAluno}" />
	</h:form>
</f:view>
error que aparece no console do eclipse:
org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one property: pessoa
Criado 7 de novembro de 2008
Respostas 0
Participantes 1