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

在休眠状态下映射到varchar和nvarchar

隆功
2023-03-14
问题内容

如果数据库中有2列,例如。

code varchar(3)
name nvarchar(50)

如何告诉Hibernate通过varchar进行代码搜索?

在休眠映射字符串中,字符串被映射到nvarchar,并产生如下查询:

Select code, name From table where code=N'AAA'  (instead of code='AAA')

这非常糟糕,因为它导致索引扫描而不是索引查找操作(扫描所有索引节点而不是直接转到请求的节点)

由于代码用于数百万行以及几个索引和外键中,因此将代码从varchar更改为nvarchar会导致性能下降(IO操作更多,因为nvarchar使用的空间是varchar的两倍)。

有什么方法可以告诉Hibernate根据数据库类型而不是Java类型进行映射?

谢谢


问题答案:
<type-mapping>
        <sql-type jdbc-type="NVARCHAR" hibernate-type="string" />
 </type-mapping>

将以上代码添加到休眠的reveng文件中。



 类似资料:
  • 问题内容: 我正在尝试在hibernate状态下使用mysql 字符串函数,但不幸的是我无法使用它,甚至无法通过创建这些注册函数来尝试 使用mysqldialect但没有人在工作..任何人都可以告诉我如何在hibernate状态下使用mysql字符串函数。或对上述寄存器功能的任何更改。 提前致谢, 最好的问候,拉贾。 问题答案: 通过扩展mysqldialect来创建一个类,如下所示 } 并在查询

  • 问题内容: 我有一堂课(我不能改变): 可能的映射如下所示: 这可以正常工作并映射到以下数据库表: 我的问题是,在hibernate状态下如何将这两个集合(和)映射到同一表中,从而为日志生成以下架构: 编辑 :我想保留Java代码并按原样设置语义。我正在寻找诸如鉴别器,公式或hibernateAPI扩展之类的东西,这些东西可以解决此问题而无需接触Java代码。可能有些事情(虚构的hibernate

  • 问题内容: 我需要在hibernate状态下禁用ONLY_FULL_GROUP_BY。这是我当前的会话工厂。我不确定如何在其中指定sql_mode =’‘。 问题答案: 我认为您可以在JDBC连接字符串中进行设置,例如

  • 问题内容: 我是新来的hibernate者,很沮丧。在我的数据库中,我的表的列为。我使用NetBeans 6.5.1当我生成,和它设置的列是类型。这不是我期望的,也不是我希望他们成为的。 我在hibernate论坛上找到了这篇文章,并说: 在文件中。 在Netbeans中,您无法从该文件生成映射(每次都会创建一个新映射),并且它似乎也无法从该文件重新生成映射(至少根据此文件已定在版本7中可用)。

  • 问题内容: 我需要预先将没有实现接口的枚举映射到现有数据库,该数据库使用将该枚举存储在与所有者类相同的表中。 在这种情况下应如何处理映射?持久化到数据库不会改变,因为实现该接口的所有枚举都将具有不同的值,但是我不确定应如何从数据库中检索对象(我是否需要自定义映射器,它将尝试实例化一个使用指定的enum类进行枚举吗?Hibernate是否本身支持此功能?)。 问题答案: 可以创建一个自定义(例如th

  • 问题内容: Hibernate提供的注释支持使用或两种类型的映射。当我们使用映射时,它使用的“名称” 而不是Enum 的表示形式。在数据库列仅包含一个字符的情况下,这是一个问题。例如,我有以下枚举: 当我坚持枚举使用,即休眠尝试在数据库中存储的值是开放的。但是,我的数据库列仅包含一个字符,因此会引发异常。 克服这个问题的一个办法是改变枚举类型持有单个字符(如,代替,)。但是,这降低了可读性。有什么