栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JPA辅助表为只读视图-Hibernate仍尝试插入行

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JPA辅助表为只读视图-Hibernate仍尝试插入行

据我所知,注释将

@PrimaryKeyJoinColumn
选定的列标记为insertable = false和updatable = false。

我认为情况并非如此:

@SecondaryTable
当记录是实际表而不是视图时,如何将记录插入到中?

由于没有

@SecondaryTable
@PrimarykeyJoinColumn
有防止插入的一种手段那么这样看来,原来的解决方案是行不通的,而且需要进行选择。

一种选择是将VIEW_TWO映射为,

@Entity
并以级联选项设置为none
CPBracket
@OneToOne
关系链接到您的课程。

@Entity@Table(name ="VIEW_TWO")private CpBracketSummaryData(){}@Entity@Table(name = "ONE")public class CpBracket {    @oneToOne    @PrimaryKeyJoinColumn    private CPBracketSummaryData summaryData;    public int getSomevalue(){        return summaryData.getSomevalue();    }}

第二种选择是使用非JPA兼容的,特定于Hibernate的

@Formula
注释。

@Entity@Table(name = "ONE")public class CpBracket {       @Formula("native sql query")       private int somevalue;}

2016年10月更新

我在Hibernate 4.3.10.Final和5.1.0.Final中都对此进行了重新讨论,并且可以将视图作为a

@SecondaryTable
而无需插入: 如果您具有正确的映射

场景1

加载实体以进行编辑,并且不要触摸映射到辅助表的任何字段。没有更新发布到辅助表

方案2

创建并保存一个新实体,并且不要设置任何映射到辅助表的字段。没有为辅助表发出插入

情况3

创建或更新实体,该实体包括映射到辅助表的字段,并且该字段被标记为insertable = false和updateable = false。的插入
到二次表仅取得了ID字段-the行为报道,在原来的问题。

原始问题中的映射问题在于,辅助表字段是原始类型,因此在保存新实体时,Hibernate确实认为必须将记录写入值为零的辅助表。

@Column(name="progress", table="VIEW_TWO", updatable = false, insertable = false)private int progress = 0;

然后,解决方案是将原语替换为相应的包装器类型,并将其保留为null。然后,在保存新记录时,没有任何内容可写入辅助表,并且不会进行插入:

@Column(name="progress", table="VIEW_TWO")private Integer progress;


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/467054.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号