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=false
和 insertable=false
,使它们成为只读的。
但是,您为什么不直接从 ProgramSummary 中选择值,可能使用普通 SQL?
【讨论】:
以上是关于Hibernate -- 将具有单个值的视图映射到只读字段的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate / JPA在合并后获取数据库中具有默认值的列的值
Hibernate OneToMany 关系:未映射到单个属性