gpt4 book ai didi

java - Hibernate 查询不返回更新的结果

转载 作者:行者123 更新时间:2023-11-30 11:31:26 25 4
gpt4 key购买 nike

在我的项目中,我有两个部分 UI 和 Engine。两者都在访问相同的数据库,但 hbm.xml 文件和 hibernate 连接不同。如果我尝试从 UI 更新某些表值,引擎端查询不会返回更新后的值。

这是一些普遍的问题吗?下面是我的代码。上网查了一下,发现了一些关于Hibernate Cache的东西。我不知道如何删除它。请帮忙。

public CgUssdGatewayConf getGwConfig(Long gwId)
{
logger.info("GW ID : "+gwId);
Criteria criteria = getSession().createCriteria(CgUssdGatewayConf.class);
criteria.add(Restrictions.eq("gwId", gwId));
//Now checking while cache loading time.
//criteria.add(Restrictions.eq("status", Constants.GW_STATUS_ENABLE));

List<CgUssdGatewayConf> list = (List<CgUssdGatewayConf>) criteria.list();
if(list != null && !list.isEmpty())
{
CgUssdGatewayConf cgUssdGatewayConf = list.get(0);
logger.info("GW ID : "+cgUssdGatewayConf.getGwId()+ " :: Name : "+cgUssdGatewayConf.getGwName() + " :: Status : "+cgUssdGatewayConf.getStatus());
return cgUssdGatewayConf;
}
return null;
}

我的 hibernate 配置是-

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="hibernateProperties">
<props>
<!-- Mysql Config -->
<prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
<prop key="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/consentgateway</prop>
<prop key="hibernate.connection.username">cg</prop>
<prop key="hibernate.connection.password">cg123</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

<prop key="hibernate.connection.autoReconnect">true</prop>
<prop key="hibernate.connection.autoReconnectForPools">true</prop>
<prop key="hibernate.connection.is-connection-validation-required">true</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">false</prop>
<prop key="hibernate.c3p0.min_size">4</prop>
<prop key="hibernate.c3p0.max_size">50</prop>
<prop key="hibernate.c3p0.timeout">0</prop>
<prop key="hibernate.c3p0.max_statements">0</prop>
<prop key="hibernate.c3p0.idle_test_period">10800</prop>
<prop key="hibernate.c3p0.acquire_increment">3</prop>
<prop key="hibernate.connection.useUnicode">true</prop>
<prop key="hibernate.connection.characterEncoding">UTF-8</prop>
<prop key="hibernate.c3p0.maxAdministrativeTaskTime">0</prop>
<prop key="hibernate.c3p0.acquireRetryAttempts">5</prop>
<prop key="hibernate.connection.useUnicode">true</prop>
<prop key="hibernate.connection.characterEncoding">UTF-8</prop>
</props>
</property>

<property name="mappingResources">
<list>
<value>CgUssdGatewayConf.hbm.xml</value>
</list>
</property>
</bean>

最佳答案

一级缓存在 Hibernate 中是默认的,并且总是与 Session 对象相关联。 Hibernate 默认使用这个缓存。在这里,它处理一个又一个事务。主要是它减少了在给定事务中需要生成的 SQL 查询的数量。这不是在事务中完成每次修改后更新,而是仅在事务结束时更新事务。

为了反射(reflect)缓存查询的效果需要提交Hibernate Transaction。

我不知道您是否已提交,但请检查一下。

Transaction trnsction = session.beginTransaction();

update queries

transaction.commit();

关于java - Hibernate 查询不返回更新的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17148923/

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