在Oracle视图中为Hibernate insert设置固定值

时间:2013-09-03 06:17:01

标签: 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, creation_timestamp)
     VALUES (hibernate_sequence.NEXTVAL, 'dddd', SYSDATE)

is_pikap为0(在DB中为默认值),因此is_pikap在视图中固定为1。

在Oracle视图中插入时是否有设置固定值的解决方案

这种需求是因为在Java应用程序中减少了Hibernate映射。

我需要一个针对此问题的休眠或查看解决方案。

我正在使用may .hbm.xml的这个映射:

<property
        name="isPikap"
        type="int"
        column="IS_PIKAP"
        not-null="true"
        length="1"
        formula="1"
        />

在我的java实体中:

private int isPikap = 1;
public int getIsPikap() {
    return isPikap;
}
public void setIsPikap(int i) {
    isPikap=1;
}

但是使用hibernate insert生成的查询是:

Hibernate: insert into VW_PIKAP_APPROLE (APPROLE_NAME, APPROLE_ID) values (?, ?)

所以当我使用调试器时,java实体的isPikap值是1!

1 个答案:

答案 0 :(得分:1)

我认为您无法在此视图中插入数据,因为is_pikap是从表达式派生的 使用Hibernate,我想您可以创建视图映射,使is_pikap最终并初始化为1

@Entity
@Table("vw_pikap_approle")
class vw_pikap_approle {
  @Column(name="is_pikap")
  private final int is_pikap = 1;

  /* Other properties with accessors  */
}