HHH-13908 fix the issue MySQL's 'time' function issue in Criteria
This commit is contained in:
parent
5b9ec29ecb
commit
41161f9fa9
|
@ -194,7 +194,7 @@ public class MySQLDialect extends Dialect {
|
||||||
registerFunction( "second", new StandardSQLFunction( "second", StandardBasicTypes.INTEGER ) );
|
registerFunction( "second", new StandardSQLFunction( "second", StandardBasicTypes.INTEGER ) );
|
||||||
registerFunction( "sec_to_time", new StandardSQLFunction( "sec_to_time", StandardBasicTypes.TIME ) );
|
registerFunction( "sec_to_time", new StandardSQLFunction( "sec_to_time", StandardBasicTypes.TIME ) );
|
||||||
registerFunction( "sysdate", new NoArgSQLFunction( "sysdate", StandardBasicTypes.TIMESTAMP ) );
|
registerFunction( "sysdate", new NoArgSQLFunction( "sysdate", StandardBasicTypes.TIMESTAMP ) );
|
||||||
registerFunction( "time", new StandardSQLFunction( "time", StandardBasicTypes.TIME ) );
|
registerFunction( "time", new StandardSQLFunction( "time", StandardBasicTypes.STRING ) );
|
||||||
registerFunction( "timestamp", new StandardSQLFunction( "timestamp", StandardBasicTypes.TIMESTAMP ) );
|
registerFunction( "timestamp", new StandardSQLFunction( "timestamp", StandardBasicTypes.TIMESTAMP ) );
|
||||||
registerFunction( "time_to_sec", new StandardSQLFunction( "time_to_sec", StandardBasicTypes.INTEGER ) );
|
registerFunction( "time_to_sec", new StandardSQLFunction( "time_to_sec", StandardBasicTypes.INTEGER ) );
|
||||||
registerFunction( "to_days", new StandardSQLFunction( "to_days", StandardBasicTypes.LONG ) );
|
registerFunction( "to_days", new StandardSQLFunction( "to_days", StandardBasicTypes.LONG ) );
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
package org.hibernate.query.criteria.internal.hhh13908;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
@Entity(name = "Foo")
|
||||||
|
@Table(name = "Foo")
|
||||||
|
public class Foo {
|
||||||
|
@Id
|
||||||
|
Long id;
|
||||||
|
String startTime;
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
package org.hibernate.query.criteria.internal.hhh13908;
|
||||||
|
|
||||||
|
import javax.persistence.criteria.CriteriaBuilder;
|
||||||
|
import javax.persistence.criteria.CriteriaQuery;
|
||||||
|
import javax.persistence.criteria.Root;
|
||||||
|
|
||||||
|
import org.hibernate.dialect.MySQLDialect;
|
||||||
|
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
|
||||||
|
|
||||||
|
import org.hibernate.testing.RequiresDialect;
|
||||||
|
import org.hibernate.testing.TestForIssue;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.hibernate.testing.transaction.TransactionUtil.doInJPA;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Archie Cobbs
|
||||||
|
* @author Nathan Xu
|
||||||
|
*/
|
||||||
|
@RequiresDialect( MySQLDialect.class )
|
||||||
|
public class HHH13908Test extends BaseEntityManagerFunctionalTestCase {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Class<?>[] getAnnotatedClasses() {
|
||||||
|
return new Class<?>[] { Foo.class };
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestForIssue( jiraKey = "HHH-13908" )
|
||||||
|
public void testTimeFunctionNotThrowException() {
|
||||||
|
doInJPA( this::entityManagerFactory, entityManager -> {
|
||||||
|
final CriteriaBuilder cb = entityManager.getCriteriaBuilder();
|
||||||
|
final CriteriaQuery<Foo> cq = cb.createQuery( Foo.class );
|
||||||
|
final Root<Foo> foo = cq.from( Foo.class );
|
||||||
|
cq.select( foo )
|
||||||
|
.where(
|
||||||
|
cb.lessThanOrEqualTo(
|
||||||
|
cb.function( "TIME", String.class, foo.get( Foo_.startTime ) ),
|
||||||
|
"17:00:00"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
// without fixing, the following exception will be thrown:
|
||||||
|
// Parameter value [17:00:00] did not match expected type [java.util.Date (n/a)]
|
||||||
|
//java.lang.IllegalArgumentException: Parameter value [17:00:00] did not match expected type [java.util.Date (n/a)]
|
||||||
|
entityManager.createQuery( cq ).getResultList();
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue