-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Problems with composite-id in cache!!! I need help!
PostPosted: Sun Jul 23, 2006 1:53 pm 
Newbie

Joined: Sun Jul 23, 2006 1:23 pm
Posts: 1
Hibernate version:
NHibernate-1.2.0.Alpha1

Mapping documents:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0"
auto-import="false"
default-access="nosetter.camelcase-underscore"
default-lazy="true"
assembly="AtivosONLINE.Entidades"
namespace="AtivosONLINE.Entidades">

<!-- AtivosONLINE.Entidades.Derivativos -->
<class name="AtivosONLINE.Entidades.Derivativos.Derivativo"
table="ATV_DerivativosLiquidacoes"
lazy="true"
discriminator-value="?">
<cache usage="read-only" />
<id name="Liquidacao" column="DataLiquidacao" unsaved-value="null">
<generator class="assigned" />
</id>
<discriminator column="IdDerivativo" force="true" not-null="true" />
<bag name="Vencimentos"
table="ATV_DerivativosTaxas"
lazy="true"
inverse="true"
order-by="DataVencimento desc">
<cache usage="read-only" />
<key column="DataLiquidacao" />
<one-to-many class="AtivosONLINE.Entidades.Derivativos.Vencimento" />
</bag>
<subclass name="AtivosONLINE.Entidades.Derivativos.DI1Futuro" discriminator-value="1" />
</class>

<class name="AtivosONLINE.Entidades.Derivativos.Vencimento"
table="ATV_DerivativosTaxas"
lazy="true">
<cache usage="read-only" />
<composite-id>
<key-many-to-one name="Derivativo"
class="AtivosONLINE.Entidades.Derivativos.Derivativo"
column="DataLiquidacao" />
<key-property name="Data" column="DataVencimento" />
</composite-id>
<property name="Taxa" column="Taxa" not-null="true" />
</class>
</hibernate-mapping>

Classes

using System;
using System.Collections.Generic;
using System.Text;
using NHibernate;
using NHibernate.Expression;

namespace AtivosONLINE.Entidades.Derivativos
{
public abstract class Derivativo
{
#region Privados

private DateTime _liquidacao;
private IList<Vencimento> _vencimentos;

#endregion

#region Públicos

public DateTime Liquidacao {
get { return _liquidacao; }
set { _liquidacao = value; }
}

public IList<Vencimento> Vencimentos {
get { return _vencimentos; }
}

#endregion

#region Sobrecargas

/// <returns>A <see cref="T:System.String"></see> that represents the current <see cref="T:System.Object"></see>.</returns>
public override string ToString() {
return _liquidacao.ToShortDateString();
}

#endregion

#region CRUD

public void Load(DateTime liquidacao) {
NHibernate.GetSession.Load(this, liquidacao);
}

public static IList<Derivativo> ListLiquidacoes<derivativo>()
where derivativo : Derivativo {
return NHibernate.GetSession.CreateCriteria(typeof(derivativo))
.List<Derivativo>();
}

#endregion

}

}

using System;
using System.Collections.Generic;
using System.Text;

namespace AtivosONLINE.Entidades.Derivativos {
public class Vencimento {

#region Privados

private DateTime _data;
private Derivativo _derivativo;
private double _taxa;

#endregion

#region Públicos

public DateTime Data
{
get { return _data; }
set { _data = value; }
}

public double Taxa {
get { return _taxa; }
set { _taxa = value; }
}

public Derivativo Derivativo {
get { return _derivativo; }
}

#endregion

#region Sobrecarregados

/// <returns>A <see cref="T:System.String"></see> that represents the current <see cref="T:System.Object"></see>.</returns>
public override string ToString()
{
return string.Format("{0} : {1}", _data.ToShortDateString(), _taxa);
}

/// <param name="obj">The <see cref="T:System.Object"></see> to compare with the current <see cref="T:System.Object"></see>.</param>
/// <returns>true if the specified <see cref="T:System.Object"></see> is equal to the current <see cref="T:System.Object"></see>; otherwise, false.</returns>
public override bool Equals(object obj) {
if (this == obj) return true;

Vencimento ve = obj as Vencimento;
if (ve == null) return false; // null or not Derivativo

if (!_derivativo.Equals(ve.Derivativo)) return false;
if (_data != ve.Data) return false;

return true;

}

/// <returns>A hash code for the current <see cref="T:System.Object"></see>.</returns>
public override int GetHashCode() {
unchecked {
int result = 17;
result = 37 * result + _derivativo.Liquidacao.GetHashCode();
result = 37 * result + _data.GetHashCode();
return result;
}
}

#endregion

#region CRUD

public void Load<derivativo>(DateTime liquidacao, DateTime vencimento)
where derivativo : Derivativo, new() {
derivativo de = new derivativo();
de.Load(liquidacao);
_derivativo = de;
_data = vencimento;
NHibernate.GetSession.Load(this, this);
}

//public void Load(Type obj, DateTime liquidacao, DateTime vencimento) {
// obj i = new obj();
// Derivativo de = new obj();
// de.Load(liquidacao);
// _derivativo = de;
// _data = vencimento;
// NHibernate.GetSession.Load(this, this);
//}
//public void Load(Derivativo derivativo, DateTime vencimento) {
// _derivativo = derivativo;
// _data = vencimento;
// NHibernate.GetSession.Load(this, this);
//}

#endregion
}
}

Teste:

using System;
using System.Collections.Generic;
using System.Text;
using AtivosONLINE.Entidades.Derivativos;

namespace Teste
{
class Program
{
static void Main(string[] args) {
print(); // read DB
print(); // read cache
print(); // read cache
}

static void print()
{
DI1Futuro di = new DI1Futuro();
di.Load(new DateTime(2006, 7, 14));
Console.WriteLine(di.Liquidacao);
Console.ReadKey();

foreach (Vencimento ve in di.Vencimentos)
{
Console.WriteLine(string.Format("{0} : {1}", ve.Data.ToShortDateString(), ve.Taxa));
}
Console.ReadKey();
}

}
}


Output console:
14/7/2006 00:00:00
2/1/2017 : 15,4801310765165
4/1/2016 : 15,5401732778472
2/1/2015 : 15,6202282612012
2/1/2014 : 15,7203161327787
2/1/2013 : 15,6403167163039
14/7/2006 00:00:00
1/1/0001 : 0
1/1/0001 : 0
1/1/0001 : 0
1/1/0001 : 0
1/1/0001 : 0
14/7/2006 00:00:00
1/1/0001 : 0
1/1/0001 : 0
1/1/0001 : 0
1/1/0001 : 0
1/1/0001 : 0

When the object with composite-id comes of cache it this emptiness!
We knows which is the problem?
I find that the problem this in the GetHashCode but already I tried of everything and not consigor to decide.

Comment:
translated for Babel Fish
sorry my bad English.

_________________
Antonio Luis Milesi Bastos


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.