我有一个 pojo,它是表 TableA 的对象 A
表A(int a1,int a2)
。
为了填充表,我运行一个返回 (int a1, int a2, boolean b3) 的查询(并运行多个数据检查)
b3 在 TableA 中无效,但我仍然想对两者使用相同的 pojo (这是一个非常大的 pojo ,并且仅仅为了查询而使用一个 pojo 将是一个主要的代码重复)
我已经在pojo中声明了
@Transient
Boolean getB3() {..}
void setB3(Boolean b3) {..}
在查询中我声明我期望获得 b3 值:
<return> ...
<return-property name="b3" column="b3"/>
...
</return>
但是 Hibernate 只是忽略该参数并且从不使用“setB3()”.. 当我删除 @Transient 时,它起作用(然后在插入表时自然失败) - 所以所有名称都是正确的
我该如何解决这个问题?
谢谢!
最佳答案
好吧,不同的想法。我想既然您将该属性标记为 transient hibernate ,则既不会加载也不会存储该属性。
一种解决方案可能是创建两个类。一种没有 b 属性。第二个是使用mappedSuperclass 注释从第一个扩展而来的。
或者你可以尝试用一些 formula 来映射它它只是提供一些默认值(例如 false)。因此,对于“正常”情况,您 hibernate 将使用公式,从而产生一些默认值,而对于您的特殊查询,您可以使用该查询中的任何逻辑。
关于Hibernate - 在 pojo 中声明 Transient 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/565216/