Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate查询未返回更新的结果_Java_Hibernate - Fatal编程技术网

Java Hibernate查询未返回更新的结果

Java Hibernate查询未返回更新的结果,java,hibernate,Java,Hibernate,在我的项目中,我有两部分UI和引擎。两者都在访问相同的数据库但不同的hbm.xml文件和hibernate连接。如果我尝试从UI更新一些表值,引擎端查询不会返回更新后的值 这是一般性的问题吗?下面是我的代码。我在线查看了它,发现了一些关于Hibernate缓存的信息。我不知道如何移除它。请帮忙 public CgUssdGatewayConf getGwConfig(Long gwId) { logger.info("GW ID : "+gwId); Criteria crite

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

这是一般性的问题吗?下面是我的代码。我在线查看了它,发现了一些关于Hibernate缓存的信息。我不知道如何移除它。请帮忙

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;
}
public cgusdgatewayconf getGwConfig(长gwId)
{
logger.info(“GW ID:+gwId”);
Criteria=getSession().createCriteria(CgUssdGatewayConf.class);
标准。添加(限制。等式(“gwId”,gwId));
//现在检查缓存加载时间。
//添加(限制.eq(“状态”,常量.GW_状态_启用));
List=(List)条件。List();
if(list!=null&&!list.isEmpty())
{
CgUssdGatewayConf CgUssdGatewayConf=list.get(0);
logger.info(“GW ID:+cgUssdGatewayConf.getGwId()+”::名称:“+cgUssdGatewayConf.getGwName()+”::状态:“+cgUssdGatewayConf.getStatus());
返回cgUssdGatewayConf;
}
返回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>

com.mysql.jdbc.Driver
jdbc:mysql://127.0.0.1:3306/consentgateway
cg
cg123
org.hibernate.dialogue.mysqldialogue
真的
真的
真的
假的
假的
4.
50
0
0
10800
3.
真的
UTF-8
0
5.
真的
UTF-8
CgUssdGatewayConf.hbm.xml

一级缓存根本无法禁用。 但是,您可以在加载对象之前从中退出。因此,将从数据库中重新读取对象

Session.evict(entity);
刷新
对象。还从数据库加载最新的对象状态,并重写会话中现有的对象状态

Session.refresh(entity);

第一级缓存是Hibernate中的默认内容,并且始终与会话对象关联。默认情况下,Hibernate使用此缓存。在这里,它处理一个又一个事务。它主要减少了在给定事务中需要生成的SQL查询的数量。也就是说,它只在事务结束时更新事务,而不是在事务中每次修改后更新

为了反映缓存查询的效果,需要提交Hibernate事务

我不知道你是否犯了罪,但检查一下

Transaction trnsction = session.beginTransaction();

update queries

transaction.commit();

您是否启用了二级缓存(hibernate.cache.use_second_level_cache)?我添加了这一行false,但它仍在发送旧值。这是否有问题?因为我尝试了多次更新,每次都给出了很多值。然而,DB的第一个值,即模块开始时出现的值,即将到来。所以我不认为事务提交是一个问题,是吗?我以前遇到过这个问题。我在更新数据时没有启动事务和提交。您可以像这样尝试一下-getSession().execute(cgusdgatewayconf);getSession().refresh(cgUssdGatewayConf);其中cgUssdGatewayConf是Hibernate模型类对象。但仍然没有进展。您确定在UI部件尝试检索引擎更改之前已提交这些更改吗?您还可以尝试将Session.clear()作为getGwConfig方法的第一行运行。这将完全清除hibernate会话。尝试检查是否已通过使用SQL Developer studio手动运行SQL提交了更改。在我试图通过hibernate获取数据的同一个java文件中,我正在通过JDBC调用DB。JDBC正在返回正确(更新)的结果。但Hibernate调用正在返回旧数据。我通过getSession()进行了检查;但是没有成功。我现在会逐一检查我的文件。