尊者是Oracle視圖vendor_view和表廠商(廠商表僅包含PK與名ID爲簡單起見)JPA插入和可更新與查看和SecondaryTable
create view vendor_view as
select id as vid, 'YES' as active
from vendors;
Coresponding實體
@Entity
@Table(name = "vendors")
@SecondaryTable(name = "vendor_view", pkJoinColumns = {@PrimaryKeyJoinColumn(name = "vid", referencedColumnName = "id")})
public class Vendor {
@Id
private Long id;
@Column(table = "vendor_view", name = "vid", insertable = false, updatable = false)
private Long vid;
@Column(table = "vendor_view", name = "active", insertable = false, updatable = false)
private String active;
getter and setter....
}
當我嘗試堅持新的供應商實體然後面對問題:
org.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement; SQL [insert into vendor_view (vid) values (?)]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:238)
.....
Caused by: org.hsqldb.HsqlException: INSERT, UPDATE, DELETE or TRUNCATE not permitted for table or view
at org.hsqldb.error.Error.error(Unknown Source)
JPA實現是Hibirnate。
問題是,爲什麼Hibirnate產生插入查詢該標記爲插入=假,可更新=假場?
在這裏看到我的答案http://stackoverflow.com/a/37160701/1356423。除非你明確地設置了一個映射到'@ SecondaryTable'的字段(如果它是一個視圖,你不應該這麼做),否則不會執行插入更新語句。如果是,那麼即使所有其他字段映射爲不可插入/可更新,也會爲ID列創建插入語句。 –