вызов функции mysql, возвращающей varchar в спящем режиме - PullRequest
1 голос
/ 02 декабря 2011

Я пытаюсь использовать строковую функцию mysql find_in_set в hibernate, но, к сожалению, я не могу ее использовать и даже пытался создать эти функции регистра

registerFunction("findInSet",newSQLFunctionTemplate(Hibernate.STRING,"FIND_IN_SET(?1,?2)"));
registerFunction("findInSet",newSQLFunctionTemplate(Hibernate.INTEGER,"FIND_IN_SET(?1,?2)"));
registerFunction("findInSet",new StandardSQLFunction("find_in_set", Hibernate.INTEGER));

с помощью mysqldialect, но никто не работаетМожет ли кто-нибудь, пожалуйста, скажите мне, как использовать строковые функции mysql в спящем режиме.или любые изменения в вышеупомянутых функциях регистра.

Заранее спасибо,

С наилучшими пожеланиями, Раджа.

Ответы [ 3 ]

1 голос
/ 02 декабря 2011

Функцию просто вызвать, если ваша функция возвращает значение string or varchar .

session.createSQLQuery("select my_super_fn(:param1)")

Где my_super_fn - имя вашей функции с параметром param1 .

Чтобы проверить синтаксис, попробуйте этот код, который возвращает текущую дату сервера.

Date d = (Date)session.createSQLQuery("select CURDATE()").uniqueResult();
System.out.println(d);

Для других типов функций см. Вопрос здесь о том, как это сделать.

0 голосов
/ 06 ноября 2016

Это работает для меня:

package mypackage;

import org.hibernate.dialect.MySQL5InnoDBDialect;
import org.hibernate.dialect.function.SQLFunctionTemplate;
import org.hibernate.type.BooleanType;

public class CustomSqlDialect extends MySQL5InnoDBDialect {
    public CustomSqlDialect() {
        registerFunction("find_in_set", new SQLFunctionTemplate(IntegerType.INSTANCE, "find_in_set(?1, ?2)");
    }
}

И установите это в вашем файле конфигурации JPA:

<property name="hibernate.dialect" value="mypackage.CustomSqlDialect"/>

Наконец, для find_in_set вы должны убедиться, что условный запрос равен find_in_set(...) > 0.Использование find_in_set() без оператора сравнения не удастся выполнить с ошибкой AST.

Кроме того, вам, очевидно, следует переопределить соответствующий диалект и имя пакета.

0 голосов
/ 23 января 2013

создал класс, расширив mysqldialect, как показано ниже

public class MySqlDialectExtended extends MySQLDialect {

public MySqlDialectExtended() {
    super();
    registerFunction("date_add_interval", new SQLFunctionTemplate(Hibernate.DATE, "date_add(?1, INTERVAL ?2 ?3)"));
    registerFunction("date_sub_interval", new SQLFunctionTemplate(Hibernate.DATE, "DATE_SUB(?1, INTERVAL ?2 ?3)"));
    registerFunction("weekofyear", new StandardSQLFunction("weekofyear", Hibernate.INTEGER));
    registerFunction("group_concat", new StandardSQLFunction("group_concat", Hibernate.STRING));
}

}

, и использовал его следующим образом в запросе

new Query(" >= date_sub_interval(CURRENT_DATE(),1, DAY)");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...