Daew pessoal estou com uma duvida aqui com o hibernate, eh a seguinte:
Tenho um classe pessoa, uma classe aluno que extende pessoa e um classe curso.
Um curso tem N alunos.
Na minha classe Curso tenho um Set de alunos, quando busco o objeto curso do bd ele vem blz, agora quando
no resultado do bd faço curso.getAlunos() o hibernate tenta realizar um join, que eh o certo contudo em vez de o join ser
feito na tbAluno o hibernate esta usando a tbPessoa que eh o pai.
Quero saber qual a maneira de corrigir isso.
pessoa
public class Pessoa implements Serializable {
private static final long serialVersionUID = 0L;
private int id;
private String nome;
private char tpPessoa;
// get's and set's
}
public class Aluno extends Pessoa{
private static final long serialVersionUID = 1L;
private String email;
private Curso curso;
// get's and set's
}
public class Curso implements Serializable{
private static final long serialVersionUID = 1L;
private int id;
private String nome;
private Set<Aluno> alunos;
// get's and set's
}
Pessoa.hbm
[code]
genPessoa
<property name="nome" column="nome" not-null="true" length="20"/>
</class>[/code]
Aluno.hbm
<subclass name="entidades.Aluno" extends="entidades.Pessoa" discriminator-value="F">
<join table="tbAluno">
<key column="idPessoa" not-null="true" on-delete="cascade"
unique="true" />
<property name="email" column="email" />
<many-to-one name="curso" column="idCurso" class="entidades.Curso"/>
</join>
</subclass>
Curso.hbml
<class name="entidades.Curso" table="tbCurso">
<id column="idCurso" name="id" type="integer">
<generator class="sequence">
<param name="sequence">genCurso</param>
</generator>
</id>
<property name="nome" column="nome" type="string" length="20"/>
<set name="alunos" inverse="true" cascade="delete" order-by="nome">
<key column="idCurso" not-null="true" />
<one-to-many class="entidades.Aluno"/>
</set>
</class>
Classe main
[code]
FabricaSessoesHibernate.getInstancia().carregueFabricasHibernate();
CursoDAO dao = new CursoDAO();
dao.inicieTransacao();
Curso c = (Curso) dao.getObjeto(Curso.class, 1);
System.out.println(c.getAlunos().toString());
dao.termineTransacao(false);[/code]
Erro:
[quote]
Hibernate: select curso0_.idCurso as idCurso1_0_, curso0_.nome as nome1_0_ from tbCurso curso0_ where curso0_.idCurso=?
Hibernate: select alunos0_.idCurso as idCurso1_, alunos0_.idPessoa as idPessoa1_, alunos0_.idPessoa as idPessoa0_0_, alunos0_.nome as nome0_0_, alunos0_1_.email as email2_0_, alunos0_1_.idCurso as idCurso2_0_ from tbPessoa alunos0_ inner join tbAluno alunos0_1_ on alunos0_.idPessoa=alunos0_1_.idPessoa where alunos0_.idCurso=? order by alunos0_.nome
org.hibernate.exception.GenericJDBCException: could not initialize a collection: [entidades.Curso.alunos#1]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.loadCollection(Loader.java:1926)
at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:36)
at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:520)
at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:60)
at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1676)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:344)
at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
at org.hibernate.collection.PersistentSet.toString(PersistentSet.java:253)
at Teste.main(Teste.java:15)
Caused by: org.firebirdsql.jdbc.FBSQLException: GDS Exception. Dynamic SQL Error
SQL error code = -206
Column unknown
ALUNOS0_.IDCURSO
At line 1, column 308.
at org.firebirdsql.jdbc.FBPreparedStatement.(FBPreparedStatement.java:76)
at org.firebirdsql.jdbc.FBConnection.prepareStatement(FBConnection.java:223)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:442)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:368)
at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:105)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1561)
at org.hibernate.loader.Loader.doQuery(Loader.java:661)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.loadCollection(Loader.java:1919)
… 8 more[/quote]