我正在使用Spring-data,并且我想通过使用View替换由表映射的集合。但是当我保存EntityParent包含此集合时,可以看到它尝试在View中插入数据:
org.springframework.dao.InvalidDataAccessResourceUsageException:无法执行批处理; SQL [插入到view_data1_data2(data1_id_fk,data2_id_fk)值(?,?)中]];
原因:java.sql.BatchUpdateException:ORA-01779:无法修改映射到非键保留表的列
当我尝试更新EntityParent时,出现此错误:
org.springframework.dao.InvalidDataAccessResourceUsageException:无法执行批处理;从view_data1_data2中删除,其中data1_id_fk =?
由以下原因引起:java.sql.BatchUpdateException:ORA-01752:如果没有一个完全保留键的表,则无法从视图中删除。
我想知道,是否有可能在保存或更新时不保留视图中的任何数据?
我试图在注释JoinColumn或Column上将可更新和可插入设置为false,但这是行不通的。我尝试了@ReadOnlyProperty,结果似乎一样。
class EntityParent {
...
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "view_data1_data2",
joinColumns = {@JoinColumn(name = "data1_id_fk", referencedColumnName = "id", updatable = false, insertable = false)},
inverseJoinColumns = {@JoinColumn(name = "data2_id_fk", referencedColumnName = "id", updatable = false, insertable = false)})
private List<MyData> myDatas;
...
}