我有一个名为VoceMenuUtente
的类,注释为@Entity,有2个字段:
我选择了获取数据库中的数据。在将它们打印到屏幕上之前,我必须在数据库中添加一个字符串,所以我这样做:
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,所以我可能犯了一些错误。
是否取决于我在标记read-only="true"
<tx:method name="*"/>
这一事实
答案 0 :(得分:4)
通过get
,查询,条件等从数据库加载对象后,对象状态与持久性上下文相关联,对它的任何更改都会自动传播到DB。
您不必在该对象上显式调用update
。 update
用于通过会话重新附加分离的对象。一个之前一直存在但尚未与Hibernate会话相关联的对象。
如果要覆盖该默认行为,可以调用session.evict(voceMenuUtente)
。这将使对象分离(从持久化上下文中逐出对象)。