Java 在Oracle视图中为Hibernate insert设置固定值
我正在oracle 10g中创建一个视图,如下所示:Java 在Oracle视图中为Hibernate insert设置固定值,java,sql,oracle,hibernate,hibernate-mapping,Java,Sql,Oracle,Hibernate,Hibernate Mapping,我正在oracle 10g中创建一个视图,如下所示: CREATE OR REPLACE FORCE VIEW vw_pikap_approle AS SELECT approle_id, approle_name, creation_timestamp,1 is_pikap FROM approle WHERE is_pikap = 1 / 但在插入 INSERT INTO vw_pikap_approle (approle_id, approle_name,
CREATE OR REPLACE FORCE VIEW vw_pikap_approle
AS
SELECT approle_id, approle_name, creation_timestamp,1 is_pikap
FROM approle
WHERE is_pikap = 1
/
但在插入
INSERT INTO vw_pikap_approle (approle_id, approle_name, creation_timestamp)
VALUES (hibernate_sequence.NEXTVAL, 'dddd', SYSDATE)
is_pikap为0(在DB中为默认值),因此is_pikap在视图中固定为1
在Oracle视图中插入时是否有设置固定值的解决方案
这是因为减少了java应用程序中的Hibernate映射
我需要一个解决这个问题的hibernate或view解决方案
我将此映射用于may.hbm.xml:
<property
name="isPikap"
type="int"
column="IS_PIKAP"
not-null="true"
length="1"
formula="1"
/>
但使用hibernate insert生成的查询是:
Hibernate: insert into VW_PIKAP_APPROLE (APPROLE_NAME, APPROLE_ID) values (?, ?)
所以当我使用调试器时,java实体的isPikap值是1 我认为您无法将数据插入此视图,因为is_pikap是从表达式派生的。
使用Hibernate,我想您可以创建视图映射making is_pikap final并初始化为1
@Entity
@Table("vw_pikap_approle")
class vw_pikap_approle {
@Column(name="is_pikap")
private final int is_pikap = 1;
/* Other properties with accessors */
}
你不能只在基础表上设置
default1
,而不在视图中包含该列吗?不,这是不可能的。由于基础表是许多子系统的通用表,那么如何使用xml进行映射呢?请使用公式
默认值在xml中不可用。从xml中删除公式并将is_pikap设置为固定值,然后插入(记住将视图代码更改为可插入视图)。我认为这是唯一的办法
@Entity
@Table("vw_pikap_approle")
class vw_pikap_approle {
@Column(name="is_pikap")
private final int is_pikap = 1;
/* Other properties with accessors */
}