Java Hibernate正在尝试更新视图

Java Hibernate正在尝试更新视图,java,hibernate,Java,Hibernate,由于复杂的原因,我在数据库中定义了一个视图,我希望hibernate能够读取这个视图,所以我将它映射为一个常规表。这一切在生产中似乎都运转良好 现在我在做一个测试,它爆炸了。我打开了hibernate show sql和sql注释,我发现: Hibernate: /* FROM PostponeDateLimit WHERE postponeDate>=? AND postponeDate <=? AND controlCode = ? ORDER BY postponeDate A

由于复杂的原因,我在数据库中定义了一个视图,我希望hibernate能够读取这个视图,所以我将它映射为一个常规表。这一切在生产中似乎都运转良好

现在我在做一个测试,它爆炸了。我打开了hibernate show sql和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.

Hibernate:/*FROM PostponeDateLimit,其中postponeDate>=?推迟日期=?和延迟0。请求日期您可以根据


在这种情况下,最好使com.pojo.延迟日期限制类不可变。这还将捕获任何试图更改数据的代码-我怀疑这是正在发生的事情,而不是Hibernate执行某些操作

您可以根据


在这种情况下,最好使com.pojo.延迟日期限制类不可变。这还将捕获任何试图更改数据的代码——我怀疑这是正在发生的事情,而不是Hibernate在做什么

您可以在debug上运行测试吗?如果是这样,请在SQLException上设置一个断点异常,这样您就可以看到发生了什么,以及它为什么要发布这些更新。@Luciano我目前正在寻找我的版本的hibernate源代码。您可以在debug上运行测试吗?如果是这样,请在SQLException上设置一个断点异常,这样您就可以看到发生了什么以及它为什么要发布这些更新。@Luciano我目前正在寻找我的版本的hibernate源代码。看来您必须在会话中设置一些东西才能做到这一点?如果是这样的话,我该如何使用Spring呢?最后在映射文件中的类定义上放置mutable=“false”。这似乎已经解决了问题。顺便说一下,在hibernate文档中没有找到(现在,有人知道为什么hibernate觉得需要更新数据库中的这些行吗?看看当不可变时会发生什么-尝试更改的代码应该抛出一个异常我的代码从来没有更改过这个,否则它会在生产中向上流动。当更新运行时,它在上面显示的select查询上爆炸。hibernate正在自动启动更新。看来您必须在会话中设置一些内容才能完成此操作?如果是这样,我如何使用Spring完成此操作?最后在映射文件中的类定义上添加了mutable=“false”。这似乎已经解决了此问题。顺便说一句,在hibernate文档中未发现此问题:(现在,有人知道为什么hibernate觉得需要更新数据库中的这些行吗?看看当不可变时会发生什么-尝试更改的代码应该抛出一个异常我的代码从来没有更改过这个,否则它会在生产中向上流动。当更新运行时,它在上面显示的select查询上爆炸。hibernate正在自动启动更新。
<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>