Java 如何防止JPA/Hibernate尝试从(只读)DB view mapped Map属性中删除?
我有这样的想法:Java 如何防止JPA/Hibernate尝试从(只读)DB view mapped Map属性中删除?,java,hibernate,jpa,jpa-2.1,hibernate-5.x,Java,Hibernate,Jpa,Jpa 2.1,Hibernate 5.x,我有这样的想法: @ElementCollection(fetch = FetchType.LAZY) @CollectionTable(name = "my_read_only_view", joinColumns = {@JoinColumn(name = "entity_id", referencedColumnName = "id", updatable = false, insertable =
@ElementCollection(fetch = FetchType.LAZY)
@CollectionTable(name = "my_read_only_view",
joinColumns = {@JoinColumn(name = "entity_id", referencedColumnName = "id", updatable = false, insertable = false)})
@MapKeyColumn(name = "key", updatable = false, insertable = false)
@Column(name = "value", updatable = false, insertable = false)
private Map<Long, MyEnum> mapProperty;
@ElementCollection(fetch=FetchType.LAZY)
@CollectionTable(name=“我的只读视图”,
joinColumns={@JoinColumn(name=“entity_id”,referencedColumnName=“id”,updateable=false,insertable=false)})
@MapKeyColumn(name=“key”,updateable=false,insertable=false)
@列(name=“value”,updateable=false,insertable=false)
私有地图财产;
正如它的名字所说,my_read_only_view是一个只读数据库视图,它使用特定于DB的SQL自动“计算”键和值(在JPA/Hibernate scope或QLs中我无法做到这一点)。然而,当“所有者”实体被删除时,Hibernate会尝试做它认为是自己职责的事情。。。并从该只读视图中删除相关行。DB随后会以无法从视图中删除错误进行响应
其他详细信息(我无法更改):
冬眠5.4.14
使用字段访问+字节码增强:enableLazyInitialization=true
,enableDirtyTracking=true
,enableAssociationManagement=false
,enableExtendedEnhancement=false
。。。和hibernate.bytecode.use\u reflection\u optimizer=true
该字段实际上仅由getter使用。事实上,甚至没有使用getter。这个映射的存在只是为了让我们可以将它包含在搜索条件中,甚至不应该被提取
我通过创建一个DB规则来忽略删除尝试来处理错误。。。但这仍然会对性能产生一些影响。阻止Hibernate尝试删除此项的最佳方法是什么?我在看@Formula
,但这是一个映射,据说Hibernate将在每次提取时执行它,这绝对不是我们需要或想要的。您好!你能改变地图吗?如果它是一个key=yourEntityId的映射,这不意味着可以直接映射它的值吗?让一个不可变的实体“MapEntry”包含实体的当前键和映射的当前值,而不是完整映射,怎么样?我可以调整映射。不过,事情并没有那么简单。实际上,它是一个“假装”每个实体(id)和用户(id)组合都有一行的视图,还有一列显示用户对该实体的访问/权限。这在访问控制方面提供了一致性。正如我所说,它从未被提取,但它参与了搜索条件(用户必须有足够的权限访问实体)。您是否尝试过@Immutable
?嗯,不。现在尝试。第二天早上我会有结果。。。。或者更早。。。will-seeDidn't help:[org.hibernate.engine.jdbc.spi.SqlExceptionHelper]错误:无法从视图中删除…