如何通过Hibernate对数据库列的任何读/写访问调用Java方法
我有一个两列数据库表,其中包含用户名到有效负载值的映射如何通过Hibernate对数据库列的任何读/写访问调用Java方法,java,hibernate,orm,Java,Hibernate,Orm,我有一个两列数据库表,其中包含用户名到有效负载值的映射 + -------- | ------- + | username | payload | + ---------| --------+ | foobar | 123.abc | + ---------| --------+ 出于各种(公认愚蠢但不可避免的)原因,有效负载(字符串)需要以奇怪的伪逆顺序存储(基本上是可逆散列——“abc.123”存储为“123.abc”) 我已经写了一个方法来反转数值,效果很好: 公共字符串revers
+ -------- | ------- +
| username | payload |
+ ---------| --------+
| foobar | 123.abc |
+ ---------| --------+
出于各种(公认愚蠢但不可避免的)原因,有效负载(字符串)需要以奇怪的伪逆顺序存储(基本上是可逆散列——“abc.123”存储为“123.abc”)
我已经写了一个方法来反转数值,效果很好:
公共字符串reversePayload(validPayload){…}
是否有一种方法可以配置Hibernate,使其在从有效负载
列读取或写入时调用该函数,以便让实际使用该有效负载值的代码以“标准”形式处理它
(我已经尝试过修改DAO来完成它——我认为这会起作用——但是我们的DAO并没有很好地抽象,最后我不得不添加10个不同的调用到
reversePayload
,每个调用currentSession().saveOrUpdate(user)
或currentSession().get(“”)
)创建两个属性如何-将原始值保留为瞬态,并将转换后的值映射到列。然后,你的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类型,或者(对于胆小的人来说)一个自定义的拦截器。JPA2.1有一个标准的方法来定义自定义类型,允许您完全按照自己的意愿进行操作 如果不使用JPA 2.1,Hibernate还允许定义您自己的自定义类型:
这样做的优点是即使在HQL查询参数中也能使用正确的值:Hibernate将在将值绑定到SQL语句之前反转作为参数传递的值 哦,我喜欢这个。这些应用于哪个源文件?您的映射模型类-在您的情况下,无论
用户
是什么。我们正在使用hibernate映射
XML文档进行映射-是否有与@transient
等效的映射?如果您使用XML,则不映射transient字段。