Hi, everyone,<br>
<br>
I&#39;ve found a way, although I&#39;m not sure it&#39;s the best way to do it.<br>
<br>
I implemented a CustomEntityPersister, extending the 
SingleTableEntityPersister. In this new class, I overwrote the protected
 update method, inherited from AbstractEntityPersister, and in the new 
implementation I verify which fields are dirty and, if they match the 
ones I want to be stale-tolerant, I set a flag so that later, when 
Hibernate queries which spaces are modified by the persister (via 
getPropertySpaces), I return an empty array.<br>
<br>Any comments?<br><br>
Thanks for the help.<br clear="all"><br>--<br>Luiz F. O. Corte Real<br><br>Vida Geek<br><a href="http://vidageek.net" target="_blank">http://vidageek.net</a><br><br>Caelum | Ensino e Inovação<br><a href="http://www.caelum.com.br" target="_blank">http://www.caelum.com.br</a><br>


<br><br><div class="gmail_quote">On Thu, Apr 7, 2011 at 9:44 AM, Luiz Fernando O. C. Real <span dir="ltr">&lt;<a href="mailto:luiz.real@caelum.com.br">luiz.real@caelum.com.br</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Hi Joe,<br><br>Is it really possible? If so, how can I do it?<br><br>We are trying to use the QueryCache more effectively, that&#39;s why we are thinking of hacking the cache system. There&#39;s this User model with the lastLogin attribute that is changed every time the user logs into the system. And then, every time an user logs in, all the cached queries related to the User model are invalidated. And most of the cached queries are related to this model.<br>


<br>Any other idea?<div class="im"><br><br>Thanks<br clear="all"><br>--<br>Luiz F. O. Corte Real<br><br>Vida Geek<br><a href="http://vidageek.net" target="_blank">http://vidageek.net</a><br><br>Caelum | Ensino e Inovação<br>

<a href="http://www.caelum.com.br" target="_blank">http://www.caelum.com.br</a><br>

<br><br></div><div><div></div><div class="h5"><div class="gmail_quote">On Mon, Apr 4, 2011 at 4:25 PM, Haswell, Joe <span dir="ltr">&lt;<a href="mailto:josiah.d.haswell@hp.com" target="_blank">josiah.d.haswell@hp.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div link="blue" vlink="purple" lang="EN-US"><div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Hi Luiz,</span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p><p class="MsoNormal">


<span style="font-size:11.0pt;color:#1F497D">Sorry, I didn’t read back through the thread in its entirety before responding.  A cached result is by definition invalid after the backing store has been modified in any way.  It is possible to override this behavior, but is that either necessary or desirable?  If this is a performance consideration, you should assess whether the default performance is acceptable before trying to improve it.  I think selectively disabling cache-invalidation is always going to look a bit hacky because it contravenes the cache-store contract.</span></p>


<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Thanks,</span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>


<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Joe H. | HP Software</span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p><div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">


<p class="MsoNormal"><b><span style="font-size:10.0pt">From:</span></b><span style="font-size:10.0pt"> <a href="mailto:sr.saude@gmail.com" target="_blank">sr.saude@gmail.com</a> [mailto:<a href="mailto:sr.saude@gmail.com" target="_blank">sr.saude@gmail.com</a>] <b>On Behalf Of </b>Luiz Fernando O. C. Real<br>


<b>Sent:</b> Monday, April 04, 2011 1:01 PM<br><b>To:</b> Haswell, Joe</span></p><div><div></div><div><br><b>Subject:</b> Re: [hibernate-users] Stale query cache by column</div></div><p></p></div><div><div></div>
<div><p class="MsoNormal"> </p><p class="MsoNormal" style="margin-bottom:12.0pt">Hi, Joe<br><br>Sorry, I think I didn&#39;t make myself clear. I understand that I can listen for the update to a particular table, but the event, AFAIK, is triggered after the cache invalidation, and I would like to not invalidate the cache for a specific update.<br clear="all">


<br>--<br>Luiz F. O. Corte Real<br><br>Vida Geek<br><a href="http://vidageek.net" target="_blank">http://vidageek.net</a><br><br>Caelum | Ensino e Inovação<br><a href="http://www.caelum.com.br" target="_blank">http://www.caelum.com.br</a><br>


<br></p><div><p class="MsoNormal">On Mon, Apr 4, 2011 at 3:50 PM, Haswell, Joe &lt;<a href="mailto:josiah.d.haswell@hp.com" target="_blank">josiah.d.haswell@hp.com</a>&gt; wrote:</p><div><div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">I’m not entirely sure I understand what the problem is.   You could certainly create your own event-listener that listened for an update to that particular table.  From my understanding of the problem, the cache becomes invalid immediately after an update occurs, which is when your event-listener would be triggered.  This seems to me to be the correct time to invalidate your cache.  Caches can be invalidated programmatically by Hibernate (which is what I suspect you’re seeing), or you can invalidate them manually.  If Hibernate’s default cache-invalidation is unsuitable, can you override it with appropriate semantics?</span></p>


<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Joe H. | HP Software</span></p><div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">


<p class="MsoNormal"><b><span style="font-size:10.0pt">From:</span></b><span style="font-size:10.0pt"> <a href="mailto:hibernate-users-bounces@lists.jboss.org" target="_blank">hibernate-users-bounces@lists.jboss.org</a> [mailto:<a href="mailto:hibernate-users-bounces@lists.jboss.org" target="_blank">hibernate-users-bounces@lists.jboss.org</a>] <b>On Behalf Of </b>Luiz Fernando O. C. Real<br>


<b>Sent:</b> Monday, April 04, 2011 12:39 PM<br><b>To:</b> hibernate-users<br><b>Subject:</b> Re: [hibernate-users] Stale query cache by column</span></p></div><div><div><p class="MsoNormal"> </p><p class="MsoNormal" style="margin-bottom:12.0pt">


Hi, again<br><br>Thanks for the reply, Joe. I&#39;ve checked out the event system and could not find anything helpful. It seems that the generated events are only fired after the cache is invalidated.<br><br>I&#39;ve found a way to do this implementing a QueryCache, but it&#39;s not the most elegant solution. I verify the query to be retrieved from the cache via the toString() method in the QueryKey object. If the SQL matches the one I&#39;m trying to turn stale cache tolerant, I ignore the timestamp.<br>


<br>Is there a better way to do this, to look at the query being passed? Wouldn&#39;t it be nice to have a getter for it in the QueryKey class?<br><br>Thanks<br clear="all"><br>--<br>Luiz F. O. Corte Real<br><br>Vida Geek<br>


<a href="http://vidageek.net" target="_blank">http://vidageek.net</a><br><br>Caelum | Ensino e Inovação<br><a href="http://www.caelum.com.br" target="_blank">http://www.caelum.com.br</a></p><div><p class="MsoNormal">On Thu, Mar 24, 2011 at 12:16 PM, Haswell, Joe &lt;<a href="mailto:josiah.d.haswell@hp.com" target="_blank">josiah.d.haswell@hp.com</a>&gt; wrote:</p>


<div><div><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">I’d check out the event system.  If a particular event invalidates your cache, just clear it or the region of it that’s invalid.</span></p><p class="MsoNormal">


<span style="font-size:11.0pt;color:#1F497D"> </span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Joe H. | HP Software</span></p><p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>


<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in"><p class="MsoNormal"><b><span style="font-size:10.0pt">From:</span></b><span style="font-size:10.0pt"> <a href="mailto:hibernate-users-bounces@lists.jboss.org" target="_blank">hibernate-users-bounces@lists.jboss.org</a> [mailto:<a href="mailto:hibernate-users-bounces@lists.jboss.org" target="_blank">hibernate-users-bounces@lists.jboss.org</a>] <b>On Behalf Of </b>Luiz Fernando O. C. Real<br>


<b>Sent:</b> Thursday, March 24, 2011 9:06 AM<br><b>To:</b> hibernate-users<br><b>Subject:</b> [hibernate-users] Stale query cache by column</span></p></div><div><div><p class="MsoNormal"> </p><p class="MsoNormal">Hi,<br>


<br>I&#39;m trying to implement a custom QueryCache that, like the example in <a href="http://community.jboss.org/wiki/QueryCache" target="_blank">http://community.jboss.org/wiki/QueryCache</a>, does not invalidate some existing register is updated in a specific table. However, unlike the example, I&#39;d like to do that by analyzing which columns were changed in an update.<br>


<br>More precisely, I have an User table, which has a lastLogin column. I&#39;d like to keep the QueryCache valid when I update the lastLogin of an User.<br><br>I haven&#39;t found any way to do that yet. Is that possible?<br>


<br>Thanks in advance.<br clear="all"><br>--<br>Luiz F. O. Corte Real<br><br>Vida Geek<br><a href="http://vidageek.net/" target="_blank">http://vidageek.net</a><br><br>Caelum Objects<br><a href="http://www.caelumobjects.com/" target="_blank">http://www.caelumobjects.com</a> </p>


</div></div></div></div></div><p class="MsoNormal"> </p></div></div></div></div></div><p class="MsoNormal"> </p></div></div></div></div></blockquote></div><br>
</div></div></blockquote></div><br>