On 3 January 2017 at 14:26, Steve Ebersole <st...@hibernate.org> wrote: > The plan with Stream support here is exactly that... translate the map, > filter etc calls into a SQL query.
Ah, that sounds awesome! > > > On Tue, Jan 3, 2017 at 4:41 AM Sanne Grinovero <sa...@hibernate.org> wrote: >> >> I wonder if "use streams" is a reasonable replacement for all power >> users who might have needed this? We know by experience there's loads >> of such people not reading this list, so maybe we'd need a deprecation >> cycle. >> I don't mean to dive deeply in implementation details and plans, but I >> suspect that the createFilter approach was able to limit the amount of >> data we pump out of the database into the Java heap, while a solution >> based on Java8 streams would post-filter the data, unless you plan to >> have Hibernate able to convert all filter predicates into SQL? (which >> sounds awesome but I wasn't expecting that soon..) >> >> Just wondering if that might be unacceptable to people mapping very >> large collections. >> >> Thanks, >> Sanne >> >> >> On 2 January 2017 at 15:41, Steve Ebersole <st...@hibernate.org> wrote: >> > Christian and I chatted on HipChat. It seems his confusion stems >> > partially >> > from misunderstanding #createFilter, but also the fact that I did not go >> > into detail regarding the plans for this streaming support. I thought >> > it >> > would be a good idea to discuss that at a high level here. The main >> > thing >> > to bear in mind is that intention is such that there stream calls would >> > be >> > translated into SQL rather than resolved in memory (aka get a huge >> > ResultSet and filter etc based on the stream calls). >> > >> > This email was just meant to discuss the removal of the #createFilter >> > method so I did not go into detail. Also too, the design of that is >> > still >> > a discussion point. Initially I am thinking it would leverage the JPA >> > metamodel, e.g. the static metamodel (the generated Order_ stuff). >> > >> > I should also point out that I completely plan to remove #createFilter >> > in >> > 6.0 and not introduce this streaming stuff until 6.x. 6.0 is already >> > getting beyond its initial scope and I's much rather get 6.0 released >> > earlier and "oftener" :) >> > >> > On Mon, Jan 2, 2017 at 9:11 AM Steve Ebersole <st...@hibernate.org> >> > wrote: >> > >> >> Well stop and think about it... What do you expect session.filter( new >> >> ArrayList(), "<some HQL>") to do? >> >> >> >> Yes, it has to be a PersistentCollection. Hibernate handles >> >> "persistent >> >> arrays" as well >> >> (see org.hibernate.collection.internal.PersistentArrayHolder), although >> >> it >> >> is a discouraged feature. >> >> >> >> It is used to apply: >> >> >> >> 1. an implicit from-clause element for the collection owner (named >> >> "this") >> >> 2. a restriction on the PersistentCollection's owner. >> >> >> >> So a filter like I mentioned before (`session.createFilter( >> >> customer.getOrders(), "orderDate < currentDate() - {3 months}" )`) is >> >> really the same as (it is literally converted to this internally): >> >> >> >> `select elements( this.orders ) from Customer this where this.id = >> >> <this-customer-id> and orderDate < currentDate() - {3 months}` >> >> >> >> >> >> On Mon, Jan 2, 2017 at 8:45 AM Christian Beikov < >> >> christian.bei...@gmail.com> wrote: >> >> >> >> As far as I understand from the documentation( >> >> >> >> https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/objectstate.html#objectstate-filtering), >> >> it can be used to filter collections and arrays. I don't know if it >> >> only >> >> works for persistent collections but since arrays are also mentioned, I >> >> guess not. >> >> I'd expect the collection or array to be filtered and projected >> >> in-memory >> >> if possible, thus not executing a query unless needed for a lazy >> >> collection >> >> or additional from clause. >> >> >> >> If that understanding is wrong, please help me understand what the >> >> purpose >> >> is then. >> >> >> >> >> >> Am 02.01.2017 um 12:37 schrieb Steve Ebersole: >> >> >> >> I think you are not understanding createFilter: >> >> >> >> >> >> >> >> http://docs.jboss.org/hibernate/orm/current/javadocs/org/hibernate/Session.html#createFilter >> >> >> >> Again, to call filter you'd have to have access to the Collection you >> >> want >> >> to filter. >> >> >> >> On Mon, Jan 2, 2017 at 2:40 AM Christian Beikov < >> >> christian.bei...@gmail.com> wrote: >> >> >> >> Let's say we have this entity with an attribute that is not directly >> >> exposed. >> >> >> >> class EntityA { String field; } >> >> >> >> and then you pass a collection of EntityA instances to createFilter >> >> like >> >> >> >> Collection<EntityA> collection = ... >> >> collection = session.createFilter(collection, "field = >> >> 'abc%'").getResultList(); >> >> >> >> See my point? Since Hibernate can access the field directly, this >> >> works, >> >> but with streams you'd need to expose the field via a getter so you can >> >> filter for it. >> >> >> >> >> >> Am 02.01.2017 um 09:25 schrieb Steve Ebersole: >> >> >> >> Could you explain the situation where you would map a collection but >> >> not >> >> expose it? And btw even create createFilter would not work there >> >> because >> >> you have to pass createFilter the collection >> >> >> >> On Mon, Jan 2, 2017, 2:15 AM Christian Beikov >> >> <christian.bei...@gmail.com> >> >> wrote: >> >> >> >> Well it does when you consider that there might be no getter for a >> >> field. >> >> With createFilter you could still filter the result list without >> >> exposing >> >> direct access to the field via a getter. >> >> >> >> Am 02.01.2017 um 08:52 schrieb Steve Ebersole: >> >> >> >> Field-access would have zero bearing on this >> >> >> >> On Mon, Jan 2, 2017 at 1:30 AM Christian Beikov < >> >> christian.bei...@gmail.com> wrote: >> >> >> >> Sounds good to me, but maybe we could do a poll to see if people are >> >> using this? I don't know if the filter also works for field based >> >> access >> >> strategy, but that could be a reason for keeping it around. >> >> >> >> Regards, >> >> >> >> Christian >> >> >> >> >> >> Am 31.12.2016 um 21:00 schrieb Steve Ebersole: >> >> > As I have not been hearing hardly any feedback on these 6.0 design >> >> > questions I have been trying to start, I'll be doing something >> >> > different >> >> in >> >> > this and any additional emails.. I'll state what I propose to do and >> >> > if >> >> > anyone has issue with it they can make a counter proposal. Otherwise >> >> > I >> >> > plan on following through with my proposal. >> >> > >> >> > I plan on removing Session#createFilter. There are numerous reasons >> >> > why >> >> > which I can discuss if anyone is interested in exploring this. >> >> > >> >> > Ultimately I think it makes sense to handle this via Java 8 >> >> > streams[1] >> >> > although I am not sure that needs to happen in 6.0 >> >> > >> >> > [1] https://hibernate.atlassian.net/browse/HHH-10962 >> >> > _______________________________________________ >> >> > hibernate-dev mailing list >> >> > hibernate-dev@lists.jboss.org >> >> > https://lists.jboss.org/mailman/listinfo/hibernate-dev >> >> >> >> _______________________________________________ >> >> hibernate-dev mailing list >> >> hibernate-dev@lists.jboss.org >> >> https://lists.jboss.org/mailman/listinfo/hibernate-dev >> >> >> >> >> >> >> >> >> >> >> > _______________________________________________ >> > hibernate-dev mailing list >> > hibernate-dev@lists.jboss.org >> > https://lists.jboss.org/mailman/listinfo/hibernate-dev _______________________________________________ hibernate-dev mailing list hibernate-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/hibernate-dev