Need help with Hibernate? Read this first:
http://www.hibernate.org/ForumMailingli ... AskForHelp
Hibernate version: 1.0.2
Mapping documents: 1.0.0.0
I have a composite-id in a class RateioGrupoCustoCentroCusto with foreignkeys empresa, grupoCusto and centroCusto.
Insert, update is ok.
But when I need list objects by empresa and grupoCusto the method return a list with the objects (RateioGrupoCustoCentroCusto), but when I convert list.current to RateioGrupocustoCentroCusto the centroCusto is null. Just centroCusto is null, the other relational objects is populated.
View code of class RateioGrupoCustoCentroCusto below:
Code:
[Serializable]
[Class(Table = "rateiogrupocustocentrocusto", Lazy = false)]
public class RateioGrupoCustoCentroCusto : Entidade
{
private double _valorPrevisao;
private RateioGrupoCustoCentroCustoPK _pk;
private PessoaJuridica _empresa;
private CentroCusto _centroCusto;
private GrupoCusto _grupoCusto;
///<sumary>representa a chave composta pela empresa, grupo de custo e centro de custo</sumary>
[CompositeId(-2, Name = "PK", Class = "RateioGrupoCustoCentroCustoPK", ClassType = typeof(RateioGrupoCustoCentroCustoPK))]
[KeyManyToOne(-1, Column = "RGCCC_EMP_ID", ClassType = typeof(PessoaJuridica), Name = "empresa")]
[KeyManyToOne(0, Column = "RGCCC_CC_ID", ClassType = typeof(CentroCusto), Name = "centroCusto")]
[KeyManyToOne(1, Column = "RGCCC_GC_ID", ClassType = typeof(GrupoCusto), Name = "grupoCusto")]
[Index(2, Column = "RGCCC_EMP_ID", TypeType = typeof(PessoaJuridica))]
[Index(3, Column = "RGCCC_GC_ID", TypeType = typeof(GrupoCusto))]
public RateioGrupoCustoCentroCustoPK PK
{
get {
if (_pk==null)
_pk = new RateioGrupoCustoCentroCustoPK();
return _pk;
}
set
{
if (_pk == null)
_pk = new RateioGrupoCustoCentroCustoPK();
_pk = value;
}
}
[ManyToOne(0, Cascade = CascadeStyle.None, Column = "RGCCC_GC_ID", ClassType = typeof(GrupoCusto), Name = "grupoCusto", Fetch = FetchMode.Join, Insert = false, Update = false)]
public GrupoCusto grupoCusto
{
get { return _grupoCusto; }
set { _grupoCusto = value; }
}
[ManyToOne(0, Cascade = CascadeStyle.None, Column = "RGCCC_CC_ID", ClassType = typeof(CentroCusto), Name = "centroCusto", Fetch = FetchMode.Join, Insert = false, Update = false)]
public CentroCusto centroCusto
{
get { return _centroCusto; }
set { _centroCusto = value; }
}
[ManyToOne(0, Cascade = CascadeStyle.None, Column = "RGCCC_EMP_ID", ClassType = typeof(PessoaJuridica), Name = "empresa", Fetch = FetchMode.Join, Insert = false, Update = false)]
public PessoaJuridica empresa
{
get { return _empresa; }
set { _empresa = value; }
}
///<sumary>Indica o OID para o mapeamento O.O Relacional</sumary>
public override object Key
{
get { return _pk; }
set { _pk = (RateioGrupoCustoCentroCustoPK)value; }
}
/// <summary>
/// Representa o valor do rateio para o centro de custo
/// </summary>
[Property(0, Column = "RGCCC_VALORPREVISAO", Name = "valorPrevisao", TypeType = typeof(double))]
public double valorPrevisao
{
get { return _valorPrevisao; }
set { _valorPrevisao = value; }
}
}
Code of class PK RateioGrupoCustoCentroCustoPKCode:
[Serializable]
public class RateioGrupoCustoCentroCustoPK
{
private GrupoCusto _grupoCusto;
private CentroCusto _centroCusto;
private PessoaJuridica _empresa;
public RateioGrupoCustoCentroCustoPK() { }
/// <summary>
/// Este méto é necessário para uso da chave composta pelo NHibernate
/// </summary>
/// <param name="obj">é uma Entidade: rateioGrupoCustoCentroCustoPK</param>
/// <returns>verdadeiro ou falso</returns>
public override bool Equals(object obj)
{
RateioGrupoCustoCentroCustoPK rateio = obj as RateioGrupoCustoCentroCustoPK;
if (rateio == null) return false;
if (!grupoCusto.Equals(rateio.grupoCusto)) return false;
if (!empresa.Equals(rateio.empresa)) return false;
if (!centroCusto.Equals(rateio.centroCusto)) return false;
return true;
}
/// <summary>
/// serve para retornar o HaschCode da classe
/// </summary>
/// <returns>inteiro</returns>
public override int GetHashCode()
{
unchecked
{
int result;
result = empresa.Id.GetHashCode();
result += grupoCusto.id.GetHashCode();
result += centroCusto.id.GetHashCode();
return result;
}
}
/// <summary>
/// Representa a empresa do centro de custo e do grupo de custo
/// </summary>
public PessoaJuridica empresa
{
get {
//if (_empresa == null)
// _empresa = new PessoaJuridica();
return _empresa;
}
set { _empresa = value; }
}
/// <summary>
/// Representa um centro de custo do rateio
/// </summary>
public CentroCusto centroCusto
{
get {
//if (_centroCusto == null)
// _centroCusto = new CentroCusto();
return _centroCusto;
}
set { _centroCusto = value; }
}
/// <summary>
/// Representa o grupo de custo que teve o valor da previsão rateado entre os centros de custo
/// </summary>
public GrupoCusto grupoCusto
{
get {
//if (_grupoCusto == null)
// _grupoCusto = new GrupoCusto();
return _grupoCusto;
}
set { _grupoCusto = value; }
}
}
Code of business class with list methodCode:
public class NRateioGrupoCustoCentroCusto : NGeneric
{
public override void validar(FWBase.entidade.Entidade entidade)
{
IDictionary msgs = new Hashtable();
if (((RateioGrupoCustoCentroCusto)entidade).PK.grupoCusto == null)
{
msgs.Add("GrupoCusto", "Crupo de Custo não informado.");
}
if (((RateioGrupoCustoCentroCusto)entidade).PK.centroCusto == null)
{
msgs.Add("CentroCusto", "Centro de Custo não informado.");
}
if (((RateioGrupoCustoCentroCusto)entidade).valorPrevisao == 0)
{
msgs.Add("ValorPrevisao", "O valor da previsão não pode ser igual a zero.");
}
if (((RateioGrupoCustoCentroCusto)entidade).PK.empresa == null)
{
msgs.Add("Empresa", "Empresa não informada.");
}
if (msgs.Count != 0)
{
throw new ValidacaoException(msgs);
}
}
public override FWBase.entidade.Entidade criar()
{
return new RateioGrupoCustoCentroCusto();
}
public override FWBase.entidade.Entidade criar(int id)
{
return null;
}
public IList listar(PessoaJuridica empresa)
{
ParametroOrdenacao[] ordenacao = new ParametroOrdenacao[1];
ParametroPesquisa[] parametros = new ParametroPesquisa[1];
parametros[0] = ParametroPesquisa.igual("PK.empresa", empresa);
return Persistencia.listar(typeof(RateioGrupoCustoCentroCusto), parametros, ordenacao);
}
public IList listar()
{
ParametroOrdenacao[] ordenacao = new ParametroOrdenacao[1];
ParametroPesquisa[] parametros = new ParametroPesquisa[1];
return Persistencia.listar(typeof(RateioGrupoCustoCentroCusto), parametros, ordenacao);
}
public IList listar(PessoaJuridica empresa, GrupoCusto grupoCusto)
{
ParametroOrdenacao[] ordenacao = new ParametroOrdenacao[2];
ordenacao[0] = ParametroOrdenacao.asc("empresa");
ordenacao[1] = ParametroOrdenacao.asc("grupoCusto");
ParametroPesquisa[] parametros = new ParametroPesquisa[2];
parametros[0] = ParametroPesquisa.igual("empresa", empresa);
if (grupoCusto!=null) parametros[1] = ParametroPesquisa.igual("grupoCusto", grupoCusto);
return Persistencia.listar(typeof(RateioGrupoCustoCentroCusto), parametros, ordenacao);
}
public bool existeRateio(PessoaJuridica empresa, GrupoCusto grupoCusto, CentroCusto centroCusto)
{
ParametroOrdenacao[] ordenacao = new ParametroOrdenacao[2];
ordenacao[0] = ParametroOrdenacao.asc("empresa");
ordenacao[1] = ParametroOrdenacao.asc("grupoCusto");
ParametroPesquisa[] parametros = new ParametroPesquisa[3];
parametros[0] = ParametroPesquisa.igual("empresa", empresa);
if (grupoCusto != null) parametros[1] = ParametroPesquisa.igual("grupoCusto", grupoCusto);
if (centroCusto != null) parametros[2] = ParametroPesquisa.igual("centroCusto", centroCusto);
IList lista = Persistencia.listar(typeof(RateioGrupoCustoCentroCusto), parametros, ordenacao);
bool bRetorno = false;
if (lista.Count == 0)
bRetorno = false;
else
bRetorno = true;
return bRetorno;
}
public IList listar(RateioGrupoCustoCentroCustoPK pk)
{
ParametroOrdenacao[] ordenacao = new ParametroOrdenacao[2];
ordenacao[0] = ParametroOrdenacao.asc("empresa");
ordenacao[1] = ParametroOrdenacao.asc("grupoCusto");
ParametroPesquisa[] parametros = new ParametroPesquisa[1];
parametros[0] = ParametroPesquisa.igual("PK", pk);
return Persistencia.listar(typeof(RateioGrupoCustoCentroCusto), parametros, ordenacao);
}
public void alterar(IList listaRateio)
{
try
{
IEnumerator ieLista = listaRateio.GetEnumerator();
RateioGrupoCustoCentroCusto rateio =(RateioGrupoCustoCentroCusto) this.criar();
Persistencia.iniciarTransacao();
while (ieLista.MoveNext())
{
rateio.PK.centroCusto = ((RateioGrupoCustoCentroCusto)ieLista.Current).PK.centroCusto;
rateio.PK.grupoCusto = ((RateioGrupoCustoCentroCusto)ieLista.Current).PK.grupoCusto;
rateio.PK.empresa = ((RateioGrupoCustoCentroCusto)ieLista.Current).PK.empresa;
try
{
Persistencia.consultar(rateio);
Persistencia.removerObjetoSessao(rateio);
Persistencia.atualizar((RateioGrupoCustoCentroCusto)ieLista.Current);
}
catch (Exception ex)
{
Persistencia.incluir((RateioGrupoCustoCentroCusto)ieLista.Current);
}
}
Persistencia.comitarTransacao();
}
catch (Exception ex)
{
Persistencia.cancelarTransacao();
throw new Exception(Constantes.MSG_ERRO, ex);
}
}
}
I´m using method "public IList listar(PessoaJuridica empresa, GrupoCusto grupoCusto)"
Please, any sugestion?
Thank you.