Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过Hibernate对数据库列的任何读/写访问调用Java方法_Java_Hibernate_Orm - Fatal编程技术网

如何通过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字段。