0

Hibernate 提供了通过 save() 方法将记录插入数据库的方法。例如:User() user = new User(int id, String name); userDAO.save(用户);

这很棒。但是我坚持这一点:我需要执行此查询以将记录插入表用户 SQL 查询:“插入用户值(“我的名字”,AES_ENCRYPT(“clear_txt”,“key”));例如:我的表用户有两个字段:'name'和'password'。密码需要用一些密钥加密。AES_ENCRYPT是MySQL中的一个函数。

我如何以休眠方式做到这一点?您如何处理使用提供的密钥加密数据库中的字段的要求?

4

2 回答 2

0

您可以在保存到数据库之前在 Java 中进行加密,或者您可以使用ColumnTransformer

用于从列读取值和将值写入列的自定义 SQL 表达式。用于直接对象加载/保存以及查询。写表达式必须恰好包含一个“?” 值的占位符。例如:read="decrypt(credit_card_num)" write="encrypt(?)"

于 2013-10-22T11:58:31.007 回答
0

我如何以休眠方式做到这一点?您如何处理使用提供的密钥加密数据库中的字段的要求?

使用 MySQL 的休眠方式:

//  `username` varchar(255) DEFAULT NULL,
@Column(name = "username")
@ColumnTransformer(
        read = "cast(aes_decrypt(username, 'yourkey') as char(255))", 
        write = "aes_encrypt(?, 'yourkey')")
private String username;

Hibernate 将在获取过程中将用户名列转换为 sql:

休眠:选择 this_.id 作为 id1_6_4_, ..., cast(aes_decrypt(this_.kronologis, 'ABC') as char(1020)) as kronolo11_6_4_,...

保存期间:

休眠:插入 e010_k2_pusdalops.kejadian (...kronologis...) 值 (..., aes_encrypt(?, 'ABC'),...)

希望能解决您的问题。

干杯。

于 2020-10-03T04:15:52.387 回答