标签: flush

NHibernate 3.0:TransactionScope和Auto-Flushing

在NHibernate 3.0中,FlushMode.Auto仅在环境事务下运行时无效(即,无需启动NHibernate事务).应该是?

using (TransactionScope scope = new TransactionScope()) 
{
    ISession session = sessionFactory.OpenSession();
    MappedEntity entity = new MappedEntity() { Name = "Entity", Value = 20 };
    session.Save(entity);

    entity.Value = 30;
    session.SaveOrUpdate(entity);

    // This returns one entity, when it should return none
    var list = session.
               CreateQuery("from MappedEntity where Value = 20").
               List<MappedEntity>();
}
Run Code Online (Sandbox Code Playgroud)

(从这个相关问题无耻地偷走的例子)

在NHibernate的来源,我可以看到这就是它检查是否有正在进行中(在一个事务SessionImpl.AutoFlushIfRequired),但相关方法(SessionImpl.TransactionInProgress)不考虑环境事务-不像它的近亲ConnectionManager.IsInActiveTransaction,这确实考虑环境事务.

nhibernate flush transactionscope distributed-transactions nhibernate-3

6
推荐指数
1
解决办法
4826
查看次数

Hibernate java.lang.ClassCastException:org.hibernate.action.EntityIdentityInsertAction无法强制转换为org.hibernate.action.EntityInsertAction

我正在使用Hibernate和EntityManager.我用的时候

    Session session = (Session)entityManager.getDelegate();  
    session.flush();
    session.clear();
Run Code Online (Sandbox Code Playgroud)

我明白了

java.lang.ClassCastException: org.hibernate.action.EntityIdentityInsertAction cannot be cast to org.hibernate.action.EntityInsertAction
at org.hibernate.engine.ActionQueue$InsertActionSorter.sort(ActionQueue.java:636)
at org.hibernate.engine.ActionQueue.sortInsertActions(ActionQueue.java:369)
at org.hibernate.engine.ActionQueue.sortActions(ActionQueue.java:355)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:224)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
Run Code Online (Sandbox Code Playgroud)

既然它没有说明哪个实体导致问题,我就被困在这里.有谁知道是什么原因引起的?

hibernate flush entitymanager classcastexception

6
推荐指数
1
解决办法
2168
查看次数

保存后,Hibernate不会保留数据

有人可以解释为什么在这个例子中"lastAccessed"日期没有保存到数据库中,以及如何将它保存到数据库中?我的理解是do对象是save()调用之后的附加对象,因此所有修改都应该自动保留.

注意:"myDate"正确保留,因此所有其他弹簧配置似乎都是正确的.

@Transactional(readOnly = false)
public DateObject getOrCreateDateObject(Date myDate) {
    DateObject do = null;

    do = getCurrentDateObject();  // For my tests, this has been returning null

    if (do == null) {
        // create a new object
        do = new DateObject();
        do.setDate(myDate);
        sessionFactory.getCurrentSession().save(do);
    }

    // This does not persist to the database
    do.setLastAccessed(new Date());

    return do;
}
Run Code Online (Sandbox Code Playgroud)

在save()调用之后,我还尝试了以下一些组合(以及更多).这些都不起作用:

sessionFactory.getCurrentSession().merge(do);  // tried before and after do.setDate(d2)

sessionFactory.getCurrentSession().update(do);

sessionFactory.getCurrentSession().saveOrUpdate(do);

sessionFactory.getCurrentSession().flush();

DateObject doCopy = (DateObject)sessionFactory.getCurrentSession().load(DateObject.class, do.getId());
sessionFactory.getCurrentSession().merge(doCopy);
doCopy.setLastAccessed(new Date());
Run Code Online (Sandbox Code Playgroud)

我希望这是一个简单的答案,我只是没有看到.谢谢您的帮助!

编辑#1 05/22/2012

根据要求,这是该实体的映射,在src/main/resources/META-INF/dateobject.hbm.xml中指定.我可以看到在mysql客户端中使用"SELECT*FROM dateObjects"在数据库中创建列.MY_DATE已正确填充,但LAST_ACCESSED设置为NULL. …

spring hibernate flush save persist

6
推荐指数
1
解决办法
7514
查看次数

在FilterChain.doFilter()之后添加Cookie - HttpServletResponseWrapper忽略刷新?

我想HttpServletResponse在其内容(通常是HTML)呈现之后添加cookie .

正如这里所提到的(http://osdir.com/ml/java.jasig.uportal/2005-10/msg00276.html),这里(在刷新标题后,在Java中为响应添加一个cookie?),这个可以通过缓冲响应来实现它不会被刷新并发送到客户端(因为在将报头发送到客户端之后,响应被提交,并且不再有标头,即cookie头,可以发送到客户端).

假设这是目前的目标:我认为实现这一目标的一种可能方法是使用a HttpServletResponseWrapper,我可以覆盖它的flushBuffer()方法并防止将header\content实际刷新到客户端:

public class BufferedHttpServletResponse extends HttpServletResponseWrapper {

    public BufferedHttpServletResponse(HttpServletResponse response) {
        super(response);
    }

    public void flushBuffer() {
    }

}
Run Code Online (Sandbox Code Playgroud)

并将此缓冲响应应用于a Filter,以使用过滤器链的其余部分:

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {

    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;

    BufferedHttpServletResponse bufferedResponse = new BufferedHttpServletResponse(response);

    chain.doFilter(request, bufferedResponse);

    // ... create Cookie and add it to response ... response.addCookie(newCookie)
    // response.flushBuffer() ?        

}
Run Code Online (Sandbox Code Playgroud)

问题:上面还可以,还是完全关闭?响应的缓冲区是否会继续填充内容\标题(并且可能会重新调整大小)直到我 …

cookies servlets flush servlet-filters

6
推荐指数
1
解决办法
3406
查看次数

如何在配置文件中将刷新模式设置为"COMMIT"?

我使用的是Spring 3.1.1.RELEASE,Hibernate 4.1.0.Final和JPA 2.0.有没有一种方法可以在没有Java代码的情况下执行事务后将Spring事务配置为提交?换句话说,我想将flush模式设置为在应用程序上下文文件,hibernate配置文件或persistence.xml文件中提交.我的Spring事务服务类看起来像

@Transactional(rollbackFor = Exception.class)
@Service
public class ContractServiceImpl implements ContractService
{

    @Autowired
    private ContractDAO m_contractDao;

    public void addContract(Contract contract)
    {
       m_contractDao.create(contract);
    }

    ...
Run Code Online (Sandbox Code Playgroud)

我的应用程序上下文设置如此......

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
    <property name="url" value="jdbc:hsqldb:mem:myproject" />
    <property name="username" value="sa" />
    <property name="password" value="" />
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <property name="persistenceXmlLocation" value="classpath*:META-INF/test-persistence.xml"/>
    <property name="persistenceUnitName" value="testingDatabase"/>
    <property name="dataSource" ref="dataSource"/>
</bean>

<bean id="sharedEntityManager" class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
   <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

<tx:annotation-driven /> …
Run Code Online (Sandbox Code Playgroud)

spring hibernate jpa transactions flush

6
推荐指数
1
解决办法
2万
查看次数

需要双重冲洗吗?

冲洗Stream后是否需要冲洗StreamWriter

public static async Task WriteStringAsync(this Stream stream, string messageString)
{
        var encoding = new UTF8Encoding(false); //no BOM
        using (var streamWriter = new StreamWriter(stream, encoding))
        {
            await streamWriter.WriteAsync(messageString);
            await streamWriter.FlushAsync();
        }
        await stream.FlushAsync(); //is this necessary?
}
Run Code Online (Sandbox Code Playgroud)

c# flush stream streamwriter

6
推荐指数
1
解决办法
797
查看次数

std :: ofstream :: close()实际上做了什么?

这个问题:如何保护日志免受应用程序崩溃?引导我到另一个 - std::ofstream::close()实际上做了什么?我知道它的召唤flush(),这是一回事.但还有什么?实际关闭文件的是什么?

编辑:让我重新解释一下我的问题 - 在调用过程中对实际文件做了什么实际操作,close()还是只是std::ofstream内部清理?

c++ fstream flush

6
推荐指数
2
解决办法
5187
查看次数

每次输入后刷新stdin - 哪种方法不是错误的?

Mark Lakata指出,垃圾无法正常在我的问题我定义想出了这一点.我会保持更新,以避免混淆.


我试图获得一个函数,我可以在提示用户输入之前调用,如printf("Enter your choice:);跟随a,scanf并确保只有在提示后输入的内容才会被scanf作为有效输入扫描.

据我所知,所需的功能是完全冲洗标准输入的东西.这就是我想要的.因此,对于此功能而言"garbage",用户输入中的所有内容,即在该用户提示之前的整个用户输入.


scanf()在C中使用时,总是存在输入缓冲区中存在额外输入的问题.所以我在寻找一个我在每次scanf调用后调用的函数来解决这个问题.我用这个,这个,这个这个来得到这些答案

//First approach
scanf("%*[^\n]\n");

//2ndapproach
scanf("%*[^\n]%*c");

//3rd approach
int c;
while((c = getchar()) != EOF) 
    if (c == '\n') 
        break;
Run Code Online (Sandbox Code Playgroud)

所有这三个都是通过命中试验和参考文献找到的.但是在我的所有代码中使用任何这些代码之前,我想知道这些代码中是否有任何错误?

编辑:

感谢Mark Lakata的第3个错误.我在问题中纠正了它.

EDIT2:

Jerry Coffin回答之后,我在代码中使用该程序测试了前两种方法:使用GNU GCC编译器阻止IDE 12.11(版本未在编译器设置中声明).

#include<stdio.h>

int main()
{
    int x = 3; //Some arbitrary value
    //1st one
    scanf("%*[^\n]\n");
    scanf("%d", &x);
    printf("%d\n", x);

    x = 3;
    //2nd …
Run Code Online (Sandbox Code Playgroud)

c flush

6
推荐指数
1
解决办法
2万
查看次数

为什么在刚创建输出缓冲区时需要刷新它?

在以下场景中

ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream());
output.flush();
// Do stuff with it
Run Code Online (Sandbox Code Playgroud)

为什么始终需要在初始创建后刷新缓冲区?
我一直都看到这一点,我真的不明白必须要冲洗什么.除非另有说明,否则我希望新创建的变量为空.

有点像买垃圾桶,在里面找到一堆垃圾.

java io flush

6
推荐指数
1
解决办法
573
查看次数

在Jupyter笔记本中刷新for循环输出

我想i在我的Jupyter笔记本上打印出来并将其冲洗掉.在下一次迭代之后,我将打印下一次i.我尝试了这个问题这个问题的解决方案,然而,它只打印出来0123...9而没有为我刷新输出.这是我的工作代码:

import sys
import time

for i in range(10):
    sys.stdout.write(str(i)) # or print(i, flush=True) ?
    time.sleep(0.5)
    sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)

这些是我的设置:ipython 5.1,python 3.6.也许,我错过了以前的解决方案?

python flush jupyter-notebook

6
推荐指数
2
解决办法
5766
查看次数