[Hibernate-JIRA] Created: (HHH-3458) Register postgres random() function as "rand" in PostgresSQLDialect
by Stephen Cresswell (JIRA)
Register postgres random() function as "rand" in PostgresSQLDialect
-------------------------------------------------------------------
Key: HHH-3458
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3458
Project: Hibernate3
Issue Type: Improvement
Components: build
Affects Versions: 3.2.5
Environment: Postgres 8.3
Reporter: Stephen Cresswell
Priority: Trivial
I have an HQL query which uses "order by rand()". This works fine in our local integration tests (which are run against hsqldb), but fails against our build integration tests which runs postgres.
The reason the query fails is because postgres function for "rand" is called "random". We can workaround this by dynamically detecting the db driver and generating db specific queries, but it strikes me that the cleanest solution for this is to simply re-register postgres' random function as "rand" in the PostgresSQLDialect, i.e.
registerFunction( "random", new NoArgSQLFunction("random", Hibernate.DOUBLE) );
registerFunction( "rand", new NoArgSQLFunction("random", Hibernate.DOUBLE) );
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
13 years, 2 months
[Hibernate-JIRA] Created: (HHH-6643) Criteria doesn't support a chaining of 2 not restrictions (sql = not not criterion)
by Lorber Sebastien (JIRA)
Criteria doesn't support a chaining of 2 not restrictions (sql = not not criterion)
-----------------------------------------------------------------------------------
Key: HHH-6643
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6643
Project: Hibernate Core
Issue Type: Bug
Components: query-criteria
Affects Versions: 3.2.7
Environment: Oracle 10g
Hibernate 3.2.7
Reporter: Lorber Sebastien
Priority: Trivial
When we do:
"Restrictions.not( Restrictions.not( Restrictions.eq("field",3) ) );"
Hibernate generates
"where not not field=3"
Which generates an SQL exception
The correct SQL syntax is:
"where not (not field=3)"
(At least our Oracle)
I think Hibernate should handle such a case.
/!\
See org.hibernate.criterion.NotExpression#toSqlString
It seems that for MySQLDialect the parenthesis are added, but not for other dialects...
I don't know the sql specificities of all dialects but perhaps the parenthesis should be added also for oracle dialect?
Note that we use a custom dialect, extending Oracle10gDialect
For those interested: i'm doing two not on a criterion instead of using the criterion directly.
In real world, my code sample would be a little more complex: sometimes we compose with a lot of criterions, in many different methods.
So i do not exactly use Restrictions.not( Restrictions.not( criterion ) );
Trust me, bad luck, it happened that the dynamic composition of my restrictions, in one specific case, resulted on a double not restriction applied to a criterion.
Note that an easy workaround of this is to "add the parenthesis manually".
A conjunction is a bit like an "empty restriction" thus what i've done is:
Restrictions.not(
Restrictions.and(
Restrictions.not(
Restrictions.eq("field",3)
),
Restrictions.conjunction()
)
);
Adding the "not criterion" into conjunction containing only the criterion.
This way, the sql of my inner not restriction become something like:
( not field = 3 AND 1=1 )
-> We can apply a not on that, while we weren't able on "not field = 3"
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
13 years, 2 months