gpt4 book ai didi

spring - Hibernate saveorupdateall 不做保存不更新

转载 作者:行者123 更新时间:2023-12-03 12:04:04 26 4
gpt4 key购买 nike

我有一个 spring 集成 hibernate 应用程序。我的应用程序选取文件并根据数据库检查它们的条目。为此,我正在使用 Hibernate。

我想禁用数据库中的某些行。我正在使用条件检索行。编辑一个字段并使用 saveorupdateall 方法。这根本没有改变我的数据库行!!

以下是代码片段

  <bean id="dmsdbDetectionJob" class="com.polling.scheduler.job.DMSDBDetectionJob">

</bean>
<bean id="dmsdbDetectionJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="dmsdbDetectionJob" />
<property name="targetMethod" value="deleteDBMaster" />
<property name="concurrent" value="false" />
</bean>
<bean id="simpleTriggerDB" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="dmsdbDetectionJobDetail" />
<!-- <property name="cronExpression" value="1 * * * * ?" /> -->
<!-- <property name="cronExpression" value="0 0/1 * * * ?" /> -->
<property name="cronExpression" value="0 52 11 ? * *" />
</bean>

这会在给定的时间正确触发。 deleteDBMaster 方法调用此代码:
        //get Document files not having any links
List<DocumentFile> strayFiles = documentDaoImpl.getStrayDocumentFiles();
try
{
if (strayFiles.size() > 0)
{
//delete
strayFiles = documentDaoImpl.softDelete(strayFiles, DocumentFile.class);
documentDaoImpl.saveOrUpdateAll(strayFiles);}
}...

softDelete 方法使用泛型
    @Override
public <T extends GenericEntity> List<T> softDelete(List<T> stray,
Class<T> clazz)
{
for (T tObj : stray)
{
clazz.cast(tObj).setActive(Constants.INACTIVE.getVal());

}
return stray;
}

当我调试时,我看到在 saveOrUpdateAll() 方法中,strayFiles 列表中对象的 active 属性中的值发生了变化。 saveOrUpdateAll 方法是:
@Override
public void saveOrUpdateAll(Collection<?> objects) throws DMSException {
try {
for (Object object : objects) {
getCrntSession().saveOrUpdate(object);
}
} catch (final HibernateException e) {
throw new DMSException("Exception while save or update All ", ErrorCode.BASE_DB_ERROR, e);
}
}

当 saveorupdate 被调用时, hibernate 不会记录任何查询。数据库中没有任何变化!!

由于这是在 spring 集成中,我刚刚在该方法中添加了一个 @Transactional。我假设 spring 必须执行刷新或提交。错了吗?即便如此,我应该看到查询对吗??

请让我知道代码中有什么问题...

谢谢

编辑::

将我的软删除代码更改为以下内容。认为可能是泛型导致了这种情况。
    @Override
@Transactional
public void softDeleteDocumentFile(
List<DocumentFile> stray)
{
for (DocumentFile tObj : stray)
{
tObj.setActive(Constants.INACTIVE.getVal());
saveEntity(tObj);
}
}

还是没有变化。行没有得到更新。 Hibernate 没有在控制台上打印更新查询!!

如果有人在代码中发现任何错误,请告诉我。

编辑::

这是配置
    <mvc:annotation-driven />

<context:component-scan base-package="com.polling" />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<context:property-placeholder location="classpath:config/jdbc.properties,classpath:config/config.properties,classpath:config/ftp.properties"/>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
>
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- Configure Hibernate 4 Session Factory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

<property name="dataSource">
<ref bean="dataSource" />
</property>

<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.generate_statistics">${hibernate.generate_statistics}</prop>
</props>
</property>
<property name="packagesToScan">
<list>
<value>com.polling.entity</value>
</list>
</property>
</bean>
<tx:annotation-driven />
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

编辑::

尝试使用硬编码 id。使用更新而不是保存。但结果还是一样,没有更新查询,因此行没有变化!!

编辑::
这是跟踪级别的日志
    14:31:12.644 T|TransactionInterceptor                  |Completing transaction for [com.polling.service.DocumentServiceImpl.deActivateStrays]
14:31:12.644 T|TransactionInterceptor |Completing transaction for [com.polling.scheduler.job.DMSDBDetectionJob.deleteDBMaster]
14:31:12.675 T|HibernateTransactionManager |Triggering beforeCommit synchronization
14:31:12.675 T|HibernateTransactionManager |Triggering beforeCompletion synchronization
14:31:12.675 D|HibernateTransactionManager |Initiating transaction commit
14:31:12.675 D|HibernateTransactionManager |Committing Hibernate transaction on Session [SessionImpl(PersistenceContext[entityKeys=[EntityKey[com.polling.entity.DocumentFile#273], EntityKey[com.polling.entity.DocumentGroup#107], EntityKey[com.polling.entity.DocumentFile#275]],collectionKeys=[CollectionKey[com.polling.entity.DocumentFile.docgroups#275], CollectionKey[com.polling.entity.DocumentGroup.files#107], CollectionKey[com.polling.entity.DocumentFile.docgroups#273]]];ActionQueue[insertions=org.hibernate.engine.spi.ExecutableList@2a6f7180 updates=org.hibernate.engine.spi.ExecutableList@7a84a043 deletions=org.hibernate.engine.spi.ExecutableList@1935cd8c orphanRemovals=org.hibernate.engine.spi.ExecutableList@1b49af42 collectionCreations=org.hibernate.engine.spi.ExecutableList@291240d collectionRemovals=org.hibernate.engine.spi.ExecutableList@6d5d2cc collectionUpdates=org.hibernate.engine.spi.ExecutableList@40025295 collectionQueuedOps=org.hibernate.engine.spi.ExecutableList@587bd507 unresolvedInsertDependencies=UnresolvedEntityInsertActions[]])]
14:31:12.675 D|AbstractTransactionImpl |committing
14:31:12.675 T|SessionImpl |Automatically flushing session
14:31:12.675 T|AbstractFlushingEventListener |Flushing session
14:31:12.675 D|AbstractFlushingEventListener |Processing flush-time cascades
14:31:12.675 T|Cascade |Processing cascade ACTION_SAVE_UPDATE for: com.polling.entity.DocumentFile
14:31:12.675 T|Cascade |Done processing cascade ACTION_SAVE_UPDATE for: com.polling.entity.DocumentFile
14:31:12.675 T|Cascade |Processing cascade ACTION_SAVE_UPDATE for: com.polling.entity.DocumentFile
14:31:12.675 T|Cascade |Done processing cascade ACTION_SAVE_UPDATE for: com.polling.entity.DocumentFile
14:31:12.675 D|AbstractFlushingEventListener |Dirty checking collections
14:31:12.675 T|AbstractFlushingEventListener |Flushing entities and processing referenced collections
14:31:12.675 D|Collections |Collection found: [com.polling.entity.DocumentFile.docgroups#273], was: [com.polling.entity.DocumentFile.docgroups#273] (uninitialized)
14:31:12.691 D|Collections |Collection found: [com.polling.entity.DocumentFile.docgroups#275], was: [com.polling.entity.DocumentFile.docgroups#275] (uninitialized)
14:31:12.691 D|Collections |Collection found: [com.polling.entity.DocumentGroup.files#107], was: [com.polling.entity.DocumentGroup.files#107] (uninitialized)
14:31:12.691 T|AbstractFlushingEventListener |Processing unreferenced collections
14:31:12.691 T|AbstractFlushingEventListener |Scheduling collection removes/(re)creates/updates
14:31:12.691 D|AbstractFlushingEventListener |Flushed: 0 insertions, 0 updates, 0 deletions to 3 objects
14:31:12.691 D|AbstractFlushingEventListener |Flushed: 0 (re)creations, 0 updates, 0 removals to 3 collections
14:31:12.691 D|EntityPrinter |Listing entities:
14:31:12.691 D|EntityPrinter |com.polling.entity.DocumentFile{encodingKey=yyy, docgroups=<uninitialized>, contactNumber=12121212, documentType=com.polling.entity.DocumentType#5, totalLinks=1, modifiedBy=com.polling.entity.UserApplicationGroup#3, documentFileName=f11, documentDescription=null, totalDownloads=0, uploaderCompletePath=somepath/somepath, modifiedDate=2014-12-16 14:36:57.707, size=0, DMSPath=c:/DMSFinalRoot\dir0\File0, id=273, createdBy=com.polling.entity.UserApplicationGroup#3, documentFormat=com.polling.entity.DocumentFormat#1, uploadDateTime=2014-12-16 14:36:56.86, keyWords=null, active=3, uploadStage=1, uploaderIP=0:0:0:0:0:0:0:1, createdDate=2014-12-16 14:36:57.707, contactPerson=some name, uploaderName=scmsname}
14:31:12.691 D|EntityPrinter |com.polling.entity.DocumentGroup{files=<uninitialized>, expiryPresent=false, modifiedBy=com.polling.entity.UserApplicationGroup#3, uploadStatus=0, documentDescription=null, modifiedDate=2014-12-22 14:28:09.027, id=107, nodeId=206, totalFiles=0, createdBy=com.polling.entity.UserApplicationGroup#3, documentFormat=null, objectId=101, active=3, documentName=doc1, nodeType=document, objectType=demand, createdDate=2014-12-22 14:28:09.027, expiryAt=null}
14:31:12.691 D|EntityPrinter |com.polling.entity.DocumentFile{encodingKey=azaz, docgroups=<uninitialized>, contactNumber=12121212, documentType=com.polling.entity.DocumentType#5, totalLinks=1, modifiedBy=com.polling.entity.UserApplicationGroup#3, documentFileName=f11, documentDescription=null, totalDownloads=0, uploaderCompletePath=somepath/somepath, modifiedDate=2014-12-17 16:52:23.163, size=0, DMSPath=c:/DMSFinalRoot\dir2\File0, id=275, createdBy=com.polling.entity.UserApplicationGroup#3, documentFormat=com.polling.entity.DocumentFormat#1, uploadDateTime=2014-12-17 16:52:22.127, keyWords=null, active=9, uploadStage=1, uploaderIP=0:0:0:0:0:0:0:1, createdDate=2014-12-17 16:52:23.163, contactPerson=some name, uploaderName=scmsname}
14:31:12.691 T|AbstractFlushingEventListener |Executing flush
14:31:12.691 T|JdbcCoordinatorImpl |Starting after statement execution processing [ON_CLOSE]
14:31:12.691 T|AbstractFlushingEventListener |Post flush
14:31:12.691 T|SessionImpl |before transaction completion
14:31:12.691 D|JdbcTransaction |committed JDBC Connection
14:31:12.691 D|JdbcTransaction |re-enabling autocommit
14:31:12.691 T|TransactionCoordinatorImpl |after transaction completion
14:31:12.707 T|SessionImpl |after transaction completion
14:31:12.707 T|HibernateTransactionManager |Triggering afterCommit synchronization
14:31:12.707 T|HibernateTransactionManager |Triggering afterCompletion synchronization
14:31:12.707 T|TransactionSynchronizationManager |Clearing transaction synchronization
14:31:12.707 T|TransactionSynchronizationManager |Removed value [org.springframework.orm.hibernate4.SessionHolder@711fbb66] for key [org.hibernate.internal.SessionFactoryImpl@5e2ed6a9] from thread [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-7]
14:31:12.707 T|TransactionSynchronizationManager |Removed value [org.springframework.jdbc.datasource.ConnectionHolder@67914078] for key [org.springframework.jdbc.datasource.DriverManagerDataSource@7bc247d0] from thread [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-7]
14:31:12.707 D|HibernateTransactionManager |Closing Hibernate Session [SessionImpl(PersistenceContext[entityKeys=[EntityKey[com.polling.entity.DocumentFile#273], EntityKey[com.polling.entity.DocumentGroup#107], EntityKey[com.polling.entity.DocumentFile#275]],collectionKeys=[CollectionKey[com.polling.entity.DocumentFile.docgroups#275], CollectionKey[com.polling.entity.DocumentGroup.files#107], CollectionKey[com.polling.entity.DocumentFile.docgroups#273]]];ActionQueue[insertions=org.hibernate.engine.spi.ExecutableList@2a6f7180 updates=org.hibernate.engine.spi.ExecutableList@7a84a043 deletions=org.hibernate.engine.spi.ExecutableList@1935cd8c orphanRemovals=org.hibernate.engine.spi.ExecutableList@1b49af42 collectionCreations=org.hibernate.engine.spi.ExecutableList@291240d collectionRemovals=org.hibernate.engine.spi.ExecutableList@6d5d2cc collectionUpdates=org.hibernate.engine.spi.ExecutableList@40025295 collectionQueuedOps=org.hibernate.engine.spi.ExecutableList@587bd507 unresolvedInsertDependencies=UnresolvedEntityInsertActions[]])] after transaction
14:31:12.707 T|SessionImpl |Closing session
14:31:12.707 I|StatisticalLoggingSessionEventListener |Session Metrics {
36322379 nanoseconds spent acquiring 1 JDBC connections;
0 nanoseconds spent releasing 0 JDBC connections;
16153296 nanoseconds spent preparing 2 JDBC statements;
20467177 nanoseconds spent executing 2 JDBC statements;
0 nanoseconds spent executing 0 JDBC batches;
0 nanoseconds spent performing 0 L2C puts;
0 nanoseconds spent performing 0 L2C hits;
0 nanoseconds spent performing 0 L2C misses;
7830765 nanoseconds spent executing 1 flushes (flushing a total of 3 entities and 3 collections);
85953666 nanoseconds spent executing 2 partial-flushes (flushing a total of 2 entities and 2 collections)
}

最佳答案

找到了我的问题的症结所在。根本不涉及交易。我错误地将 updatable=false 添加到我的实体类 property(active) get 访问器中。抱歉,添麻烦了。真的是一个非常基本的错误!!!向所有为此花费时间的人道歉..

关于spring - Hibernate saveorupdateall 不做保存不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27560874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com