![](/img/trans.png)
[英]Refresh Hibernate cache level2 on webapp side when db updating from batch side
[英]Hibernate Event Listener Not Called when changes made from DB side
我是休眠的新手。 我发现我们可以在Hibernate中使用事件侦听器,该事件侦听器将通知我们有关数据库的更改。 我感兴趣的是,如果我没有通过Java应用程序而是仅通过DB进行任何DB更改,那么是否将调用Java代码。 这是我编写的代码:
<session-factory>
<property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="hibernate.connection.url"></property>
<property name="hibernate.connection.username"></property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.connection.pool_size"></property>
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.SQLServer2008Dialect</property>
<!-- Mapping files -->
<mapping resource="hbm/ps.hbm.xml"/>
<listener type="post-insert" class="com.Dummy"/>
</session-factory>
</hibernate-configuration>
<hibernate-mapping>
<class name="com.Bean" table="Demo">
<id name="id" type="string" column="ID" />
<property name="name" type="string" column="NAME"></property>
</class>
实现PostInsertListener的侦听器类:
import org.hibernate.Session; import org.hibernate.event.PostInsertEvent; import org.hibernate.event.PostInsertEventListener; public class Dummy implements PostInsertEventListener { /** * */ private static final long serialVersionUID = 1L; @Override public void onPostInsert(PostInsertEvent event) { // TODO Auto-generated method stub System.out.println(event.getEntity() instanceof Bean); System.out.println("Inside onPostInsert"); Session session = event.getSession(); System.out.println(session.toString()); } }
主类:
public class Run {
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
System.out.println("Here");
Configuration cfg = new Configuration().configure();
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
Bean bean= new Bean();
bean.setId("4");
bean.setName("Dummy");
System.out.println("Before Insert");
session.save(bean);
System.out.println("After Save");
tx.commit();
System.out.println("After Commit");
session.close();
factory.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
当我运行主类Inserts in DB时,该代码运行起来很神奇,因为它应该按预期调用onPostInsert方法,但是如果我运行该应用程序并从DB中进行更改,即插入列,则控制台不会打印任何内容。 有什么我想念的吗? 我正在使用SQL Server ...数据库是否存在任何兼容性问题? 真的搞砸了这个需要帮助..... :)
不,直接在数据库上进行的更改不会在您的应用程序中调用侦听器。
大量更新/删除与休眠一起发出不会调用侦听器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.