Hibernate -- 将具有单个值的视图映射到只读字段

Posted

技术标签:

【中文标题】Hibernate -- 将具有单个值的视图映射到只读字段【英文标题】:Hibernate -- Mapping a view with a single value to a read-only field 【发布时间】:2011-05-05 19:36:35 【问题描述】:

(休眠 3.6,mysql 5)

我有一个名为“程序”的映射类(工作正常)。

我还有一个每日更新汇总统计信息的视图。

视图架构是这样的:

view ProgramSummary 
     long program_id
     long value

program_id 是唯一的,但没有 row-id。我想要的只是提取值,但我似乎无法找出正确的语义。

我尝试使用 OneToOne(和 ManyToOne)关系映射单独的实体,但它在 id 之间混淆了。如果没有将 program_id 标记为实体,hibernate 无法处理实际的映射。

有没有简单的方法来做到这一点?它是一个由外部进程访问的只读字段,我没有任何更改架构的余地。

【问题讨论】:

【参考方案1】:

您可以使用 Program hbm 文件中的公式来映射它。

<property name="SummaryValue" type="long" formula="(SELECT value FROM ProgramSummary WHERE ProgramSummary.program_id = id)" />

假设您的字段名为 SummaryValue,此行将更新 Program 对象中的该字段。使用公式映射的任何字段都不可更新。

【讨论】:

这就是我最终要做的。很抱歉花了这么长时间才接受这个答案。【参考方案2】:

如果您映射第二个实体,您可能希望将列设置为 updatable=falseinsertable=false,使它们成为只读的。

但是,您为什么不直接从 ProgramSummary 中选择值,可能使用普通 SQL?

【讨论】:

以上是关于Hibernate -- 将具有单个值的视图映射到只读字段的主要内容,如果未能解决你的问题,请参考以下文章

将多个表映射到单个实体

将单个键映射到多个值的序列文件

Hibernate / JPA在合并后获取数据库中具有默认值的列的值

Hibernate OneToMany 关系:未映射到单个属性

如何将多个值类型集合映射到 Hibernate 中的一个表?

如何进行 Hibernate XML 映射,一对多使用 1 PK 映射到另一个具有复合键的实体