0

私は次のように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 into VW_PIKAP_APPROLE (APPROLE_NAME, APPROLE_ID) values (?, ?)

したがって、デバッガーを使用すると、Java エンティティの isPikap 値は 1 です!

4

1 に答える 1

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  */
}
于 2013-09-03T06:27:19.447 に答える