我用的是Hibernate4.3.10,最后是mysql 5.6。
对于刷新模式,默认为“自动”,对吗?在本例中,如果有关于持久化A、选择B、提交的步骤,那么hibernate应该先执行选择B,然后执行持久化A,对吗?
(我的理解是基于https://dzone.com/articles/dark-side-hibernate-auto-flush,还是我误解了这篇文章?)
如果我的理解是正确的,为什么我的以下代码显示不同的结果(我没有手动设置刷新模式):
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
Configuration config = new Configuration();
config.configure("resources/hibernate.cfg.xml");
ServiceRegistry registry = new StandardServiceRegistryBuilder()
.applySettings(config.getProperties()).build();
return config.buildSessionFactory(registry);
}catch(Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
factory = HibernateUtil.getSessionFactory();
s = factory.openSession();
s.beginTransaction();
Student a = new Student();
a.setAge(30);
a.setName("test");
s.persist(a);
Query query = s.createQuery("from Address");
List<Address> list = query.list();
for(Address addr : list) {
System.out.println(addr.getId()+", "+addr.getZipCode());
}
s.getTransaction().commit();
s.close();
factory.close();
学生看起来像:
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
地址的id也是GenerationType。汽车也是。
我的hibernate配置文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/test</property>
<property name="connection.username">root</property>
<property name="connection.password"/>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.pool_size">1</property>
<property name="current_session_context_class">thread</property>
<property name="hibernate.cache.region.factory_class">
org.hibernate.cache.ehcache.EhCacheRegionFactory
</property>
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="net.sf.ehcache.configurationResourceName">resources/ehcache.xml</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<mapping class="com.my.hibernate.basic.Student" />
<mapping class="com.my.hibernate.basic.Address" />
</session-factory>
</hibernate-configuration>
那么为什么上述代码的hiberNate语句如下:
Hibernate:插入学生(年龄、姓名)值(?,)
Hibernate:选择地址0。id为id1_0_,地址为0_。zipCode作为zipCode2_0_u来自地址0_
不是应该是:先选择地址,然后插入学生,因为我使用“自动”刷新模式,这两个语句是相互依赖的吗?
提前谢谢!
从留档:
6.1. 自动冲洗
默认情况下,HiberNate使用AUTO刷新模式,在以下情况下触发刷新:
>
在提交事务之前
在执行与排队实体操作重叠的JPQL/HQL查询之前
在执行任何未注册同步的本机SQL查询之前
来源:https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#flushing-auto
所以在你的例子中,第2点是正确的,因为你说这两个陈述是相互依赖的。(我猜你的意思是地址与学生有关)
问题内容: '; ob_flush(); flush(); 我有专用的服务器,因此可以进行更改。我正在运行apache和nginx作为代理服务器。 问题答案: 您正在使用,而没有,因此没有需要冲洗的东西。 它还取决于Web服务器和代理及其设置。 您应该禁用Nginx的缓冲(添加到配置文件并重新启动Nginx) 另外,检查您的 php.ini是否 包含和。
问题内容: 如我的标题所述,我在应用程序中使用了hibernate刷新模式机制。因此,当我更改hibernate持久对象中的任何数据时,它会自动反映在数据库中。我不要这个 因此,我找到了使用FlushMode的解决方案。 所以这是我的实际问题: 最好使用冲洗模式代替?和 文档中此声明的含义是什么? 有时在执行查询之前会刷新会话,以确保查询从不返回过时状态。 http://docs.jboss.or
我集成了Zxing QR扫描仪库。这是我的应用程序/版本。格拉德尔 在方法中,我有 所以,当应用程序启动时,冲洗灯打开。然后我按下“启动QR扫描仪”按钮,启动QR扫描仪,我得到了预期的解析结果。 这是用于解析二维码的代码: 我的问题是: ZXing QR扫描仪会自动关闭闪光灯(我的要求是在黑暗环境中扫描,因此必须有灯光) 我还发布了日志的一部分: 我怎样才能保持齐平灯打开?
问题内容: 我在php页面中使用了无限循环功能,它每秒都会回显一个文本。当我在浏览器中打开页面时,它起作用了!但是当我通过jquery ajax加载它时没有响应! php页面 jQuery代码 问题答案: 不能仅使用$ .get来完成HTTP流传输 插入如下:http : //ajaxpatterns.org/archive/HTTP_Streaming.php。 HTTP流是一个非常复杂的技巧。
本文向大家介绍C++ 冲洗刷新流,包括了C++ 冲洗刷新流的使用技巧和注意事项,需要的朋友参考一下 示例 默认情况下,文件流以及许多其他类型的流都被缓冲。这意味着写入流可能不会导致基础文件立即更改。为了迫使所有缓冲的写操作立即进行,可以刷新流。您可以直接通过调用flush()方法或通过std::flush流操纵器来执行此操作: 有一个流操纵器std::endl,结合了编写换行符和刷新流: 缓冲可以
问题内容: 这个问题不太可能对将来的访客有所帮助;它仅与较小的地理区域,特定的时间段或极为狭窄的情况(通常不适用于Internet的全球受众)有关。要获得使该问题更广泛适用的帮助,请访问帮助中心。 7年前关闭。 我有带有Hibernate和Spring框架的Maven项目。我希望Hibernate自动创建表,但是只是删除所有现有表,并且不创建所需的表。在会话工厂初始化期间不会引发任何异常,但是当我