[hibernate-dev] firing proper events after HQL?
Adam Warski
adam at warski.org
Wed Nov 25 08:46:18 EST 2009
Either a "lazy structure" or the table name + utility method to read content of the table, as that's the operation all users of such listeners would need.
Adam
On Nov 24, 2009, at 9:09 PM, Emmanuel Bernard wrote:
> If you return a "lazy structure", we could avoid the overhead unless the data is needed :)
>
> On 24 nov. 09, at 20:52, Steve Ebersole wrote:
>
>> I think it will just pass the table name. Too much overhead to
>> materialize all the ids when the event may not even be used.
>>
>> On Tue, 2009-11-24 at 20:21 +0100, Emmanuel Bernard wrote:
>>> Good idea,
>>> If we could have an event listener that indeed does provide the
>>> information lazily, we could definitely benefit from it. But that has
>>> a cost so I think I would still keep it optional on the HSearch side.
>>>
>>> On 24 nov. 09, at 19:53, Adam Warski wrote:
>>>
>>>> Hello,
>>>>
>>>> I don't exactly know how bulk operations work, and I didn't know
>>>> that there's a temporary table with the affected ids available.
>>>> But if so, then yes, such an event would solve the problem, in the
>>>> way Steve described. (And I got asked about bulk operations quite a
>>>> lot of times, always answered that it isn't possible :) ). I think
>>>> that both Envers and Search would need the ids affected + the entity
>>>> type + the type of the operation (delete, insert, update).
>>>>
>>>> If it's possible, it would be great to have that :)
>>>>
>>>> Adam
>>>>
>>>> On Nov 24, 2009, at 3:11 PM, Steve Ebersole wrote:
>>>>
>>>>> How about a new event right at the moment after we have just
>>>>> collected
>>>>> all the ids into the temp table?
>>>>>
>>>>> For envers, this would allow you to save off the current state
>>>>> prior to
>>>>> the update/delete.
>>>>>
>>>>> For search, this would allow you to "circle back" after the operation
>>>>> and re-index those matching ids.
>>>>>
>>>>> wdyt?
>>>>>
>>>>>
>>>>> On Tue, 2009-11-24 at 08:20 +0100, Adam Warski wrote:
>>>>>> Hello,
>>>>>>
>>>>>>> a user on forums is posting about an HQL like
>>>>>>> "delete from product where id = 4"
>>>>>>> which - in case of Hibernate Search - is not going to remove the
>>>>>>> relevant document from the index.
>>>>>>>
>>>>>>> Another interesting case would be
>>>>>>> "delete from product"
>>>>>>>
>>>>>>> Any thoughts about this? Should we always use API when making
>>>>>>> changes?
>>>>>>> (https://forum.hibernate.org/viewtopic.php?f=9&t=1001076)
>>>>>>
>>>>>> In general listeners for any bulk operations aren't fired (in case
>>>>>> of a bulk update the indexes won't be updated either). This is a
>>>>>> problem also in Envers - where doing bulk operations doesn't cause
>>>>>> any historical data to be written in the audit tables. What I
>>>>>> normally advise users on the forum is to:
>>>>>> 1) run a hql which updates the historical tables (bascially
>>>>>> inserting new rows for each id affected by the hql to be executed)
>>>>>> 2) run the original hql
>>>>>>
>>>>>> For HSearch, I guess a solution would be to provide an API to tell
>>>>>> HSearch that some range of ids of some entity changed. So the user
>>>>>> would:
>>>>>> 1) get the ids affected by the query (this usually means replacing
>>>>>> delete/update by select)
>>>>>> 2) run the original hql
>>>>>> 3) pass the ids to hsearch so that it could update the indexes
>>>>>>
>>>>>> However, I'm not sure if there would be much performance gain
>>>>>> comparing using a bulk operation to a for-loop with
>>>>>> entityManager.delete in that case (HSearch would have to handle
>>>>>> each entity separately anyway; maybe not in case of a delete, but
>>>>>> certainly in case of an update).
>>>>>>
>>>>> --
>>>>> Steve Ebersole <steve at hibernate.org>
>>>>> Hibernate.org
>>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> hibernate-dev mailing list
>>>> hibernate-dev at lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>>
>> --
>> Steve Ebersole <steve at hibernate.org>
>> Hibernate.org
>>
>
More information about the hibernate-dev
mailing list