【发布时间】:2020-04-05 19:35:38
【问题描述】:
目前我们的系统上有 3 种 POJO 对象:
@Entity - DO 数据库对象(将映射对象读写到表)
@Entity - 查看对象(只读映射对象到 SELECT 语句)
模型 - 用于演示目的的非 ORM 对象
在某些情况下,我们需要在服务层中手动获取视图对象并添加/编辑几个字段并发送到演示文稿。 是否可以使用视图对象通过添加映射到虚拟列的虚拟字段('' as dummyField 在选择语句中)来做到这一点。
了解 hibernate/jpa 将尝试在事务上下文结束时刷新对象,这将在未找到表时给出错误。我们可以使用@Transactional (readonly=true) 来解决这个问题。
这样做有什么缺点吗?而不是创建一个全新的模型并用它填充视图?
【问题讨论】:
-
which will give error on table not found什么?如果您从表中读取,则该表存在。此外,一旦您离开事务,任何更改都不会自动刷新回数据库。您需要手动调用update()写回任何更改 -
XtremeBaumer - 你所说的对于第一组对象是正确的,对象映射到数据库表。 View 对象是映射到 SELECT 语句的 @Entity 对象,这些语句可能具有来自多个表的列和计算的列。在这种情况下,没有物理表。
-
那么用户不应该有可能编辑这些实体。他们应该只能查看它们
-
澄清我上面的帖子:“手动添加/编辑”是指服务层中的 java 代码向使用 @Entity 检索的视图对象添加附加信息。不是 UI 端的最终用户。
标签: java hibernate jpa dao dto