1

複雑な理由で、データベースにビューが定義されており、休止状態でこのビューを読み取れるようにしたいので、通常のテーブルと同じようにマップしました。これはすべて、本番環境で正常に機能しているようです。

今、私はテストを実行しています、そしてそれは爆発しています。私は休止状態のshowsqlとsqlコメントをオンにしました。これが私が見つけたものです:

Hibernate: /* FROM PostponeDateLimit WHERE postponeDate>=? AND postponeDate <=? AND controlCode = ? ORDER BY postponeDate ASC */ select postponeda0_.REQUEST_DATE as REQUEST1_5_, postponeda0_.COURTLOCATION as COURTLOC2_5_, postponeda0_.ALLOWED as ALLOWED5_, postponeda0_.POSTPONED as POSTPONED5_, postponeda0_.DATECAP as DATECAP5_ from POSTPONE_DATE_VIEW postponeda0_ where postponeda0_.REQUEST_DATE>=? and postponeda0_.REQUEST_DATE<=? and postponeda0_.COURTLOCATION=? order by postponeda0_.REQUEST_DATE ASC    
Hibernate: /* update com.acs.gs.juror.pojo.PostponeDateLimit */ update POSTPONE_DATE_VIEW set ALLOWED=?, POSTPONED=?, DATECAP=? where REQUEST_DATE=? and COURTLOCATION=?    
Hibernate: /* update com.acs.gs.juror.pojo.PostponeDateLimit */ update POSTPONE_DATE_VIEW set ALLOWED=?, POSTPONED=?, DATECAP=? where REQUEST_DATE=? and COURTLOCATION=?    
Hibernate: /* update com.acs.gs.juror.pojo.PostponeDateLimit */ update POSTPONE_DATE_VIEW set ALLOWED=?, POSTPONED=?, DATECAP=? where REQUEST_DATE=? and COURTLOCATION=?    
Hibernate: /* update com.acs.gs.juror.pojo.PostponeDateLimit */ update POSTPONE_DATE_VIEW set ALLOWED=?, POSTPONED=?, DATECAP=? where REQUEST_DATE=? and COURTLOCATION=?    
Hibernate: /* update com.acs.gs.juror.pojo.PostponeDateLimit */ update POSTPONE_DATE_VIEW set ALLOWED=?, POSTPONED=?, DATECAP=? where REQUEST_DATE=? and COURTLOCATION=?    
Hibernate: /* update com.acs.gs.juror.pojo.PostponeDateLimit */ update POSTPONE_DATE_VIEW set ALLOWED=?, POSTPONED=?, DATECAP=? where REQUEST_DATE=? and COURTLOCATION=?    
Hibernate: /* update com.acs.gs.juror.pojo.PostponeDateLimit */ update POSTPONE_DATE_VIEW set ALLOWED=?, POSTPONED=?, DATECAP=? where REQUEST_DATE=? and COURTLOCATION=?    
Hibernate: /* update com.acs.gs.juror.pojo.PostponeDateLimit */ update POSTPONE_DATE_VIEW set ALLOWED=?, POSTPONED=?, DATECAP=? where REQUEST_DATE=? and COURTLOCATION=?    
Hibernate: /* update com.acs.gs.juror.pojo.PostponeDateLimit */ update POSTPONE_DATE_VIEW set ALLOWED=?, POSTPONED=?, DATECAP=? where REQUEST_DATE=? and COURTLOCATION=?
Hibernate: /* update com.acs.gs.juror.pojo.PostponeDateLimit */ update POSTPONE_DATE_VIEW set ALLOWED=?, POSTPONED=?, DATECAP=? where REQUEST_DATE=? and COURTLOCATION=?
2012-07-18 16:07:44,503 35529 WARN  org.hibernate.util.JDBCExceptionReporter | SQL Error: 4406, SQLState: S1000
2012-07-18 16:07:44,503 35529 ERROR org.hibernate.util.JDBCExceptionReporter | Update or insert of view or function 'EJUROR_POSTPONE_DATE_VIEW' failed because it contains a derived or constant field.

したがって、ビューを更新すると例外が発生します。

最初のクエリのみが私によって開始されています。更新は、なんらかの奇妙な理由で休止状態によって作成されたようです。ライブボックスではなく、ローカルのテストボックスでそれが行われている理由と理由を、私は一生理解できません。

これが私の休止状態のマッピングです:

<class name="com.pojo.PostponeDateLimit" table="POSTPONE_DATE_VIEW">
    <composite-id class="com.acs.gs.juror.pojo.PostponeDateLimitKey" mapped="true">
        <key-property name="postponeDate" type="calendar" column="REQUEST_DATE"/>
        <key-property name="controlCode" column="COURTLOCATION"/>
    </composite-id>
    <property name="maxCount" column="ALLOWED"/>
    <property name="postponedCount" column="POSTPONED"/>
    <property name="dateCap" column="DATECAP"/>
</class>

誰かが洞察を持っていますか?

4

1 に答える 1

2

Hibernateドキュメントに従って、エンティティを読み取り専用にすることができます

この場合、com.pojo.PostponeDateLimitクラスを不変にするのがおそらく最善です。これは、データを変更しようとするコードもキャッチします-これは、Hibernateが何かをしているのではなく起こっていることだと思います

于 2012-07-19T11:56:22.573 に答える