Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA标准API函数转换或强制转换_Java_Sql_Hibernate_Jpa - Fatal编程技术网

Java JPA标准API函数转换或强制转换

Java JPA标准API函数转换或强制转换,java,sql,hibernate,jpa,Java,Sql,Hibernate,Jpa,我正在尝试将以下SQL转换为CriteriaBuilder代码 SQL: log_动作定义为varbinary(32) 代码: CriteriaBuilder cb=em.getCriteriaBuilder(); CriteriaQuery=cb.createQuery(Logging.class); Root-from=query.from(Logging.class); 表达式路径=from.get(“logAction”); 表达式convertFunction=cb.function(

我正在尝试将以下SQL转换为CriteriaBuilder代码

SQL:

log_动作定义为varbinary(32)

代码:

CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery=cb.createQuery(Logging.class);
Root-from=query.from(Logging.class);
表达式路径=from.get(“logAction”);
表达式convertFunction=cb.function(“CONVERT”,String.class,path);
查询。选择(从中);
谓词=cb.equal(convertFunction,“delete”);
where(谓词);
返回em.createQuery(query.getResultList();
知道我做错了什么吗

谢谢


肖恩

在尝试了很多CriteriaQuery的函数方法之后。我被卡住是因为

private static final String PG_TRANSLATE_TO = "char(100)";
    ParameterExpression<String> p = cb.parameter(String.class,"param0" );
Expression<String> convertFunction = cb.function("CONVERT", String.class, from.get("log_action"), p);
private静态最终字符串PG_TRANSLATE_TO=“char(100)”;
ParameterExpression p=cb.parameter(String.class,“param0”);
表达式convertFunction=cb.function(“CONVERT”,String.class,from.get(“log_action”),p);
始终连接字符(100),但使用引号“char(100)”,则会出现SQL错误

错误代码:1064。您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“char(100)”附近使用的正确语法=“delete”

所以我决定直接对字节进行条件查询,因为它们在开头是字符串。 并使用以下代码

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery <Logging> query = cb.createQuery(Logging.class);

    ParameterExpression<String> p = cb.parameter(String.class,"param0" );
    Root<Logging> from = query.from(Logging.class);

    query.select(from);
        query.where( cb.equal(from.get("log_action"), "delete".getBytes()));

    System.out.println(em.createQuery(query).getResultList());
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery=cb.createQuery(Logging.class);
ParameterExpression p=cb.parameter(String.class,“param0”);
Root-from=query.from(Logging.class);
查询。选择(从中);
where(cb.equal(from.get(“log_action”),“delete.getBytes());
System.out.println(em.createQuery(query.getResultList());
这确实有效

休眠:从logging0中选择logging0.log\u id作为log1\u 3\u,logging0.log\u操作作为log2\u 3\u,logging0.log\u类型作为log3\u 3\u,其中logging0.log\u操作=

[日志记录[日志id=1,日志类型=delete,日志操作=null],日志记录[日志id=2,日志类型=delete,日志操作=null],日志记录[日志id=3,日志类型=delete,日志操作=null],日志记录[日志id=4,日志类型=delete,日志操作=null],日志记录[日志id=5,日志类型=delete,日志操作=null],日志记录[日志id=6,日志类型=delete,日志操作=null],日志记录][log\u id=8,log\u type=delete,log\u action=null]]


老实说,对于大量的数据,您可能会遇到性能问题,但我也不确定XD。但最后是一个解决方案。如果我的答案对您有帮助,请不要忘记给我一个类似的答案。

在尝试了很多CriteriaQuery的函数方法之后。我陷入困境是因为

private static final String PG_TRANSLATE_TO = "char(100)";
    ParameterExpression<String> p = cb.parameter(String.class,"param0" );
Expression<String> convertFunction = cb.function("CONVERT", String.class, from.get("log_action"), p);
private静态最终字符串PG_TRANSLATE_TO=“char(100)”;
ParameterExpression p=cb.parameter(String.class,“param0”);
表达式convertFunction=cb.function(“CONVERT”,String.class,from.get(“log_action”),p);
始终连接字符(100),但使用引号“char(100)”,则会出现SQL错误

错误代码:1064。您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在第1行的“char(100)”=“delete”附近使用的正确语法

所以我决定直接对字节进行条件查询,因为它们在开头是字符串。 并使用以下代码

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery <Logging> query = cb.createQuery(Logging.class);

    ParameterExpression<String> p = cb.parameter(String.class,"param0" );
    Root<Logging> from = query.from(Logging.class);

    query.select(from);
        query.where( cb.equal(from.get("log_action"), "delete".getBytes()));

    System.out.println(em.createQuery(query).getResultList());
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery=cb.createQuery(Logging.class);
ParameterExpression p=cb.parameter(String.class,“param0”);
Root-from=query.from(Logging.class);
查询。选择(从中);
where(cb.equal(from.get(“log_action”),“delete.getBytes());
System.out.println(em.createQuery(query.getResultList());
这确实有效

休眠:从logging0中选择logging0.log\u id作为log1\u 3\u,logging0.log\u操作作为log2\u 3\u,logging0.log\u类型作为log3\u 3\u,其中logging0.log\u操作=

[日志记录[日志id=1,日志类型=delete,日志操作=null],日志记录[日志id=2,日志类型=delete,日志操作=null],日志记录[日志id=3,日志类型=delete,日志操作=null],日志记录[日志id=4,日志类型=delete,日志操作=null],日志记录[日志id=5,日志类型=delete,日志操作=null],日志记录[日志id=6,日志类型=delete,日志操作=null],日志记录][log\u id=8,log\u type=delete,log\u action=null]]


老实说,对于大量的数据,您可能会遇到性能问题,但我也不确定XD。但最后是一个解决方案。如果我的答案对您有帮助,请不要忘记给我一个类似的答案。

在尝试了很多CriteriaQuery的函数方法之后。我陷入困境是因为

private static final String PG_TRANSLATE_TO = "char(100)";
    ParameterExpression<String> p = cb.parameter(String.class,"param0" );
Expression<String> convertFunction = cb.function("CONVERT", String.class, from.get("log_action"), p);
private静态最终字符串PG_TRANSLATE_TO=“char(100)”;
ParameterExpression p=cb.parameter(String.class,“param0”);
表达式convertFunction=cb.function(“CONVERT”,String.class,from.get(“log_action”),p);
始终连接字符(100),但使用引号“char(100)”,则会出现SQL错误

错误代码:1064。您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在第1行的“char(100)”=“delete”附近使用的正确语法

所以我决定直接对字节进行条件查询,因为它们在开头是字符串。 并使用以下代码

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery <Logging> query = cb.createQuery(Logging.class);

    ParameterExpression<String> p = cb.parameter(String.class,"param0" );
    Root<Logging> from = query.from(Logging.class);

    query.select(from);
        query.where( cb.equal(from.get("log_action"), "delete".getBytes()));

    System.out.println(em.createQuery(query).getResultList());
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery=cb.createQuery(Logging.class);
ParameterExpression p=cb.parameter(String.class,“param0”);
Root-from=query.from(Logging.class);
查询。选择(从中);
where(cb.equal(from.get(“log_action”),“delete.getBytes());
System.out.println(em.createQuery(query.getResultList());
这确实有效

休眠:从logging0中选择logging0.log\u id作为log1\u 3\u,logging0.log\u操作作为log2\u 3\u,logging0.log\u类型作为log3\u 3\u,其中logging0.log\u操作=

[日志记录[log\u id=1,log\u type=delete,log\u action=null],日志记录[log\u id=2,log\u type=delete,log\u action=null],日志记录[log\u id=3,log\u type=delete,log\u action=null],Lo