[hibernate-dev] 6.0 - ResultTransformer
Steve Ebersole
steve at hibernate.org
Mon Sep 12 10:17:48 EDT 2016
Gail, IIRC one of these methods causes problems with regards to query
result caching. Do I remember that correctly? And if so, do you remember
which one? I'd guess #transformTuples, but I forget the details.
On Mon, Sep 12, 2016 at 6:36 AM Steve Ebersole <steve at hibernate.org> wrote:
> So your example actually leverages both methods... Well technically it
> only really needs the latter method (#transformList); you could have done
> all that work there - the elements of the passed collection would be the
> individual tuples.
>
>
>
>
> On Mon, Sep 12, 2016 at 6:09 AM Vlad Mihalcea <mihalcea.vlad at gmail.com>
> wrote:
>
>> Sure. I've used it recently to group a tree-like structure as follows:
>>
>> public class PostCommentScoreResultTransformer
>> implements ResultTransformer {
>>
>> private Map<Long, PostCommentScore> postCommentScoreMap = new
>> HashMap<>();
>>
>> private List<PostCommentScore> roots = new ArrayList<>();
>>
>> @Override
>> public Object transformTuple(Object[] tuple, String[] aliases) {
>> PostCommentScore commentScore = (PostCommentScore) tuple[0];
>> Long parentId = commentScore.getParentId();
>> if (parentId == null) {
>> roots.add(commentScore);
>> } else {
>> PostCommentScore parent = postCommentScoreMap.get(parentId);
>> if (parent != null) {
>> parent.addChild(commentScore);
>> }
>> }
>> postCommentScoreMap.putIfAbsent(commentScore.getId(),
>> commentScore);
>> return commentScore;
>> }
>>
>> @Override
>> public List transformList(List collection) {
>> return roots;
>> }
>> }
>>
>> The results were fetched using a Recursive CTE and I wanted the results
>> to be assembled back in a N-level hierarchy, starting from a Root node.
>>
>> On Mon, Sep 12, 2016 at 1:58 PM, Steve Ebersole <steve at hibernate.org>
>> wrote:
>>
>>> The former though is specifically what I see no use for. Do you have a
>>> specific use case in mind that cannot be addressed by other mechanisms
>>> (Tuple, dynamic-instantiation, etc)?
>>>
>>> On Mon, Sep 12, 2016, 12:38 AM Vlad Mihalcea <mihalcea.vlad at gmail.com>
>>> wrote:
>>>
>>>> Hi,
>>>>
>>>> We definitely need to address the ResultTranformer.
>>>> Only the former method is what we should be exposing, the latter being
>>>> used only in one particular use case, so that should be addressed by a
>>>> different contract.
>>>>
>>>> This way we could provide a ResultTransformer using a lambda, which is
>>>> not possible today.
>>>>
>>>> Vlad
>>>>
>>>> On Mon, Sep 12, 2016 at 5:49 AM, Steve Ebersole <steve at hibernate.org>
>>>> wrote:
>>>>
>>>>> Another legacy concept I'd like to revisit as we move to 6.0 is the
>>>>> Hibernate ResultTransformer. I'd argue that ResultTransformer is no
>>>>> longer
>>>>> needed, especially in it's current form.
>>>>>
>>>>> Specifically, ResultTransformer defines 2 distinct ways to transform
>>>>> the
>>>>> results of a query:
>>>>>
>>>>> 1. `#transformTuple` - this method operates on each "row" of the
>>>>> result,
>>>>
>>>>
>>>>> allowing the user to transform the Object[] into some other
>>>>> structure.
>>>>> This is specifically the one I see no value in moving forward.
>>>>> Between
>>>>> dynamic-instantiation, Tuple-handling, etc I think users have the
>>>>> needed
>>>>> capabilities to transform the query result tuples.
>>>>>
>>>> 2. `#transformList` - this one operates on the query result as a
>>>>> whole
>>>>
>>>>
>>>>> (unless scroll/iterate are used). This method at least adds
>>>>> something that
>>>>> cannot be done in another way. But I'd still personally question
>>>>> its
>>>>> overall usefulness.
>>>>>
>>>>> Does anyone have an argument for continuing to support either of these?
>>>>> Personally, I propose just dropping the ResultTransformer support
>>>>> altogether.
>>>>>
>>>> _______________________________________________
>>>>> hibernate-dev mailing list
>>>>> hibernate-dev at lists.jboss.org
>>>>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>>>>
>>>>
>>>>
>>
More information about the hibernate-dev
mailing list