我正在尝试将数据库视图映射到JPA实体。由于实体需要一个ID,因此我在StackOverflow中寻找解决方案,发现最好的方法是将所有列都设置为ID。
除非其中一列的值为空,否则一切似乎都可以正常工作。发生这种情况时,JPA返回一个空对象。
有人有同样的问题吗?有什么方法可以指定视图中实际上不存在的虚拟ID列吗?
最佳答案
做到这一点的最好方法是将身份逻辑放在视图本身内。
一种解决方案是使用数据库功能,例如ROW_NUMBER
或ROWID
作为视图查询的一部分来完成此任务。当然还有其他一些,但是将其作为视图查询的一部分是最合乎逻辑的。
但是,我建议您将此类实体标记为@Immutable
,因为数据是从只读视图中获取的。这只是防止在您可能试图修改此类实体的代码中发生问题或错误,而这是不允许的。