gpt4 book ai didi

java - 如何通过 Hibernate 对数据库列的任何读/写访问调用 Java 方法

转载 作者:行者123 更新时间:2023-12-02 05:23:34 25 4
gpt4 key购买 nike

我有一个两列的数据库表,其中包含用户名到负载值的映射。

+ -------- | ------- +
| username | payload |
+ ---------| --------+
| foobar | 123.abc |
+ ---------| --------+

出于各种(诚然愚蠢,但不可避免)的原因,有效负载(字符串)需要以奇怪的伪反向顺序存储(基本上是可逆哈希 - 'abc.123' 是存储为“123.abc”)。

我编写了一种方法来反转值,效果很好: public String reversePayload(validPayload) {...}

有没有一种方法可以配置 Hibernate 在从 payload 读取或写入时调用该函数列,以便我可以让实际使用该有效负载值的代码以“标准”形式处理它?

(我已经尝试修改 DAO 来做到这一点 - 我认为这会起作用 - 但我们的 DAO 并没有真正很好地抽象,我最终不得不向 reversePayload 添加 10 个不同的调用,其中一个是每个调用 currentSession().saveOrUpdate(user)currentSession().get('<username>') 的方法)

最佳答案

如何创建两个属性 - 保留原始值 transient ,并将转换后的值映射到列。然后,您的 DAO 就可以幸福地对正在发生的事情一无所知。

...

String payload;

...

@Transient
public String getPayload()
{
return payload;
}

public void setPayload(String payload)
{
this.payload = payload;
}

@Column(name = "payload")
public String getReversedPayload()
{
return reverse(getPayload());
}

public void setReversedPayload(String reversedPayload)
{
setPayload(unreverse(reversedPayload));
}

您还可以创建自定义 Hibernate 类型,或者(对于胆小的人来说)自定义拦截器。

关于java - 如何通过 Hibernate 对数据库列的任何读/写访问调用 Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26283391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com