【问题标题】:Database automatically update by Spring/Hibernate when I change a field of an Object in a class当我更改类中对象的字段时,Spring/Hibernate 会自动更新数据库
【发布时间】:2015-03-05 04:19:55
【问题描述】:

我有一个名为VoceMenuUtente 的类,注释为@Entity,有2 个字段:

  1. 描述
  2. Titolo

我进行选择以获取数据库中的数据。在将它们打印到屏幕上之前,我必须向从数据库中获取的值添加一个字符串,所以我这样做:

voceMenuUtente.setDescrizione = voceMenuUtente.getDescrizione + "blablabla";

我在一个名为 TransactionPreDAO 的课程中​​做到了这一点。我对该类有一个切入点:

<tx:advice id="txAdviceTransactionPreDAO" transaction-manager="transactionManager" >
            <tx:attributes>
                <tx:method name="*"/>
            </tx:attributes>
        </tx:advice>    
        <aop:config>
            <aop:pointcut id="transactionPreDAOTxPointcut" expression="execution(* com.springgestioneerrori.preDAO.TransactionPreDAO.*(..))" />
            <aop:advisor advice-ref="txAdviceTransactionPreDAO" pointcut-ref="transactionPreDAOTxPointcut" />
        </aop:config>

在此之后,我的数据库会自动更新,并且在 Descrizione 字段中我不再有原始值,但我有原始值加上“blablabla”?

为什么会这样?我没有对象VoceMenuUtente 的任何“更新”方法。也许这取决于切入点。我还在学习Spring,所以可能我犯了一些错误。

这是否取决于我在标签&lt;tx:method name="*"/&gt;中错过了read-only="true"这一事实

【问题讨论】:

    标签: java spring hibernate spring-mvc hibernate-mapping


    【解决方案1】:

    一旦您通过get、查询、条件等从数据库加载对象,对象状态就会与持久化上下文相关联,并且对它的任何更改都会自动传播到数据库。

    您不必在该对象上显式调用updateupdate 用于将分离的对象重新附加到会话中。之前已持久化但当前未与 Hibernate 会话关联的对象。

    如果您想覆盖该默认行为,您可以致电session.evict(voceMenuUtente)。这将使对象分离(从持久性上下文中驱逐对象)。

    【讨论】:

    • 感谢您的解释。根据我在网上看到的,我也可以使用 read-only="true",不是吗?根据我的代码,这将是一个更好的解决方案
    • 是的,如果你只有那个单一的选择,你可以在这种情况下使用只读事务。在这种情况下,Hibernate 不会执行脏检查,因此也不会更新
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 2015-01-07
    相关资源
    最近更新 更多