【问题标题】:Hibernate -- Mapping a view with a single value to a read-only fieldHibernate -- 将具有单个值的视图映射到只读字段
【发布时间】: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 无法处理实际的映射。

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

【问题讨论】:

    标签: java mysql hibernate view


    【解决方案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?

    【讨论】:

      猜你喜欢
      • 2011-04-04
      • 1970-01-01
      • 2017-08-03
      • 2011-05-25
      • 2014-10-28
      • 1970-01-01
      • 2012-06-16
      • 2013-08-20
      • 1970-01-01
      相关资源
      最近更新 更多