[hibernate-dev] Hibernate Disjunction Criteria broken: returns true for empty list of criteria

William Pugh pwilliam at google.com
Thu Oct 30 13:54:40 EDT 2008

> Yes the whole point of all WHERE clauses is to filter/reduce the available
> data-set.  I see this point of view but...

No, the point of a where clause it to give you the data you want.

A query that gives me no results back is far more useful and common
than a query that materializes my entire database in memory.

I know of a real application that had a serious problem because this
bug in hibernate caused the system to crash because it swamped memory.

The standard logic for handling an disjunction is:

    if any clause is true, return true
    otherwise, return false

Having the logic the way it is currently implemented introduces all
sorts of logical discontinuities in Hibernate.

For example, Or( X, Or(Y | Z)) != Or( Or(X, Y) | Z), using | to
represent list concatenation.

Frankly, the claim that Or of the empty list should return true isn't
credible. To be blunt, I don't want to use any software written by
someone who believes that.

> AND is generally used to decrease the size of the returned data-set.  So to
> capture the most bugs we return less data than expected "AND 1=0".

Also bogus. The standard logic for handling a conjunction is:

    if any clause is false return false
    otherwise, return true

Bill Pugh
My personal opinion, not that of any of my employers

More information about the hibernate-dev mailing list