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

  1. 获取 HIVE 进程 ID

    ps -ef |grep hive
  2. 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基础知识整理

如何监听对 HIVE 元数据的操作?

怎样解决hibernate中一级缓存导致数据不能刷新

可以对存储在关系数据库中的数据进行推理(例如使用 HIbernate)

java hibernate注解映射类的字段可以和数据库中的字段不一致吗

使用 Hibernate 的 Spring Security 3 数据库身份验证