hibernate不能对数据库中的数据进行监听吗?每次数据库里的数据更新了,但是Hibernate还是查询的是原来的
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate不能对数据库中的数据进行监听吗?每次数据库里的数据更新了,但是Hibernate还是查询的是原来的相关的知识,希望对你有一定的参考价值。
hibernate并不是在监听数据库,它只是一个JDBC的一个轻量级封装。说能监听数据库,这种说法是不正确的。hibernate查询出来原来的数据,估计跟缓存有关。
1.可能你没有使用hibernate更新数据库,导致hibernate不知道数据库发生了变化。
2.在更新的时候,缓存没有同步更新。
可以在hibernate配置中先关闭缓存,然后测试下是否正常。 参考技术A 你没有开启事物
如何监听对 HIVE 元数据的操作?
目录
简介
公司有个元数据管理平台,会定期同步 HIVE 中的元数据。但这样做有个问题,就是如果在 HIVE 中插入了一张新表或者新库等 HIVE 元数据变更的操作,元数据管理平台不能及时与 HIVE 表中的数据进行同步。因此需要调研下 HIVE 中有没有类似的监听机制,可以实现 HIVE 中有元数据更改时,能及时发通知给 元数据平台。整体的需求图如下所示
由于公司使用的 Hive 版本是 1.2.1,本文也会以此版本进行说明。如果您使用的是其他 HIVE 版本,无法就文章中的问题进行对应,请自行查阅 HIVE 官方文档。先来看下 HIVE 的基本操作。
HIVE 基本操作
获取 HIVE 源码
$ git clone https://github.com/apache/hive.git
切换到 hive-1.2
分支
git checkout -b branch-1.2 origin/branch-1.2
切换到 hive 1.2.1 tag
git checkout release-1.2.1
编译 HIVE 源码
hive 1.2.1 版本既支持 hadoop 1 ,也支持 hadoop2 ,可通过 mvn 编译时属性指定。编译 hadoop 2 版本时,命令如下
mvn clean install -DskipTests -Phadoop-2
cd itests
mvn clean install -DskipTests -Phadoop-2
如果在 itests 中编译失败,可忽略错误,不影响对正常代码的编译
启动 HIVE
nohup hive --service metastore 2>&1 &
nohup hive --service hiveserver2 2>&1 &
停止 HIVE
获取 HIVE 进程 ID
ps -ef |grep hive
kill 掉对应进程
监听对 HIVE 元数据的操作
经过调研, HIVE 中存在一个事件监听抽象类 MetaStoreEventListener
,具体 package 为 org.apache.hadoop.hive.metastore
, 在 HIVE 源码的 metastore 模块下,包含常用的 create table, drop table, create database, drop database 等操作。
public abstract class MetaStoreEventListener implements Configurable {
...
public void onCreateTable (CreateTableEvent tableEvent) throws MetaException {
}
public void onDropTable (DropTableEvent tableEvent) throws MetaException {
}
public void onAlterTable (AlterTableEvent tableEvent) throws MetaException {
}
public void onAlterPartition (AlterPartitionEvent partitionEvent) throws MetaException {
}
public void onCreateDatabase (CreateDatabaseEvent dbEvent) throws MetaException {
}
public void onDropDatabase (DropDatabaseEvent dbEvent) throws MetaException {
}
而且这个抽象类在 hive-site.xml 中关联的配置是
<property>
<name>hive.metastore.event.listeners</name>
<value/>
<description/>
</property>
只要实现了这个抽象类,将编译的 jar 包放在 ${HIVE_HOME}/lib
目录下,并配置好 hive-site.xml 文件的 hive.metastore.event.listeners
选项,重启即可生效。
开发这个插件时使用的 maven 依赖为
<dependency>
<artifactId>hive-exec</artifactId>
<groupId>org.apache.hive</groupId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.6.5</version>
</dependency>
参考文档
以上是关于hibernate不能对数据库中的数据进行监听吗?每次数据库里的数据更新了,但是Hibernate还是查询的是原来的的主要内容,如果未能解决你的问题,请参考以下文章
可以对存储在关系数据库中的数据进行推理(例如使用 HIbernate)