【问题标题】:Hibernate Java: Function "AES_DECRYPT" not found; SQL statement:休眠 Java:未找到函数“AES_DECRYPT”; SQL 语句:
【发布时间】: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;

这可能是什么问题?

【问题讨论】:

    标签: java mysql hibernate


    【解决方案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
    • 如何使用该类?