当前位置: 首页 > 面试题库 >

处理hibernate实体上数据库视图的优雅方法?

劳和雅
2023-03-14
问题内容

我使用Hibernate的主要原因之一是它提供了无需切换任何代码即可切换到另一个数据库的灵活性。

但是直到现在,我还没有找到在与我的hibernate实体匹配的表上定义其他视图的好方法。我仍然为此使用简单的SQL脚本。有没有一种更优雅的方式来定义由hibernate管理的表上的视图?

理想情况下,我想使用HQL或其他通用方法来完成这项工作,因此我不必担心我的SQL脚本与其他类型的数据库不兼容。

如果有办法做到这一点,那么第二个问题就是从这些视图中获取“合成”只读实例,这将使将汇总数据馈送到UI变得更加容易。

编辑:

似乎我没有足够明确地解决问题,所以这是我想做的事情:我想编写独立于所用数据库的代码。由于我使用了hibernate模式,因此只需更改方言配置文件,然后可以使用其他DBMS。

问题:如何在 依赖特定SQL方言(使所有内容可移植)甚至HQL的 情况下 在hibernate实体上创建 视图
?如果可能的话,是否可以使用HQL来查询这些视图,即创建只读聚合实体?有没有其他的hibernate插件可以帮助我呢?到目前为止还没有找到任何东西…:-/ __


问题答案:

Hibernate不会自动为您创建视图,因为每种方言仅支持基础数据库的数据定义语言(DDL)的有限子集。基本上,它支持足够的DDL来生成工作模式,但不足以处理诸如视图之类的“额外”对象的创建。

但是,一切都不会丢失。Hibernate确实使您能够自己在XML映射文件中创建(和删除)其他数据库对象,并且这些对象可以作用于特定的方言。例如,我可以有一个这样的映射:

<hibernate-mapping>
  <class name='com.mycompany.myproduct.Customer' table='tbl_customer'>
    <id name='id' column='customer_id'>
      <generator class='native'/>
    </id>
    <property name='name' length='50' unique='true' not-null='true' />
  </class>

  <database-object>
    <create>create or replace view read_only_cust...</create>
    <drop>drop view read_only_cust</drop>
    <dialect-scope name='org.hibernate.dialect.Oracle9Dialect' />
  </database-object>
</hibernate-mapping>

您可以通过html" target="_blank">添加更多的“数据库对象”部分来随意创建所需的其他视图。您必须为要支持的每个数据库自己编写SQL(DDL),但是由于它们的作用域是方言,因此Hibernate将仅对模式导出时选择的方言执行SQL。



 类似资料:
  • 问题内容: 我使用Hibernate的主要原因之一是它提供了无需切换任何代码即可切换到另一个数据库的灵活性。 但是直到现在,我还没有找到在与我的休眠实体匹配的表上定义其他视图的好方法。我仍然为此使用简单的SQL脚本。有没有一种更优雅的方式来定义由hibernate管理的表上的视图? 理想情况下,我想使用HQL或其他通用方法来完成这项工作,因此我不必担心我的SQL脚本与其他类型的数据库不兼容。 如果

  • 问题内容: 我有一个在测试中可以正常运行的系统,但是现在我已经将它们移至生产服务器,并准备抛出开关,我遇到了问题。 如果应用程序闲置约15分钟,则spring事务服务中的数据库连接将断开。发生这种情况后,第一个进入应用程序的人会受到欢迎 如果您在浏览器中点击F5,它将重新连接并正常运行。看起来spring在按照第一个请求进行操作时,请继续努力,我死了,在死亡过程中,重新连接到数据库。但我不确定。

  • 我是Hibernate的新手,并要求使用具有这些列的表的数据库 表:TBL _ product//库存项目列表< br >列:< br > key _ product < br > key _ category < br > fld _ product _ name < br > fld _ Inventory _ qty < br > fld _ unit _ price < br > fld

  • 本文向大家介绍Nodejs异步回调的优雅处理方法,包括了Nodejs异步回调的优雅处理方法的使用技巧和注意事项,需要的朋友参考一下 前言 Nodejs最大的亮点就在于事件驱动, 非阻塞I/O 模型,这使得Nodejs具有很强的并发处理能力,非常适合编写网络应用。在Nodejs中大部分的I/O操作几乎都是异步的,也就是我们处理I/O的操作结果基本上都需要在回调函数中处理,比如下面的这个读取文件内容的

  • 我有一个映射到数据库视图的实体,我想避免spring为它创建表,我尝试了@Immutable注释,但它不起作用,我还希望程序在没有创建实体的情况下从脚本文件为它创建视图。 感谢任何帮助。 谢谢。

  • 我有生成Hibernate实体的mysql db,现在我需要从这些实体生成内存数据库进行测试。我在试图运行我的单元测试时遇到了这个错误。 /***主]o.h.发动机。jdbc。spi。SqlExceptionHelper:SQL错误:42102,SQLState:42S02 2016-02-16 18:10:47.864错误29758---[main]o.h.engine。jdbc。spi。Sql