当我在 class 中更改 Object 的字段时,数据库会自动更新 Spring/Hibernate

Database automatically update by Spring/Hibernate when I change a field of an Object in a class

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

  1. 描述
  2. 标题

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

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

我在一个名为 TransactionPreDAO 的 class 中制作了它。我有一个切入点 class:

<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" ?

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

是否取决于我在标签<tx:method name="*"/>

中遗漏了read-only="true"

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

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

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