休眠 Java:未找到函数“AES_DECRYPT”; SQL 语句:

Posted

技术标签:

【中文标题】休眠 Java:未找到函数“AES_DECRYPT”; SQL 语句:【英文标题】:Hibernate Java: Function "AES_DECRYPT" not found; SQL statement: 【发布时间】:2015-09-07 06:38:40 【问题描述】:

我的 mysql 版本:5.6.25

查询数据库时遇到问题。

原因:org.h2.jdbc.JdbcSQLException:找不到函数“AES_DECRYPT”; SQL语句:

型号:

@Column(nullable = false)
    @ColumnTransformer(
            read="AES_DECRYPT(title, SHA2('" + AESConfig.SECRET_KEY + "',512))", 
            write="AES_ENCRYPT(?,SHA2('" + AESConfig.SECRET_KEY + "',512))")
    private String title;

这可能是什么问题?

【问题讨论】:

【参考方案1】:

您应该注册 AES_DECRYPT 函数以在 hql 查询中使用它。

尝试使用这样的东西:

registerFunction("aes_encrypt", new StandardSQLFunction("aes_encrypt", Hibernate.STRING) )
registerFunction("aes_decrypt", new StandardSQLFunction("aes_decrypt", Hibernate.STRING) )

你应该扩展标准的 MySqlDialect 类

MyCustomDialect extends MySQLDialect 

  public MyCustomDialect () 
    super();
    registerFunction("MyFunction", ....); // Second argument is an implementation of SQLFunction interface
  

【讨论】:

谢谢。我是新来的冬眠。我可以把那个代码放在哪里? @kenicky 创建你自己的方言类。 这个方言有效吗? org.hibernate.dialect.MySQLDialect 如何使用该类?

以上是关于休眠 Java:未找到函数“AES_DECRYPT”; SQL 语句:的主要内容,如果未能解决你的问题,请参考以下文章

未找到休眠属性

Tapestry 5.4 未找到用于休眠的驱动程序

休眠未从 https 域连接

HQL查询中的休眠表未映射错误

不能 AES_DECRYPT (MySQL) 使用 openssl_encrypt (PHP) 加密的字符串

在java中配置hibernate,mysql时出错