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

Hibernate注释-不区分大小写的UniqueConstraint

昌乐
2023-03-14
问题内容

我有一个带有以下注释的实体:

@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"name"})})
public class Component extends Model {
    ...
}

是否可以使UniqueConstraint大小写不敏感?我们正在使用PostgreSQL。


问题答案:

使用PostgreSQL,您确实可以执行以下操作来实现您的要求:

CREATE UNIQUE INDEX My_Index on Component (lower(name));

但是据我所知,没有办法使用注释来实现此目的。

如果您想依靠Hibernate的hbm2ddl工具来生成模式并且仍然创建该索引,那么我唯一想到的选择就是
利用该import.sql功能。来自鹿特丹JBug和Hibernate的import.sql博客文章:

import.sql:在单元测试中轻松导入数据

Hibernate具有一个简洁的小功能,该功能严重不足文档,并且未知。您可以在SessionFactory创建数据库模式后立即在创建过程中执行SQL脚本,以将数据导入到新数据库中。您只需要import.sql在您的类路径根目录中添加一个名为的文件,然后将create
设置create-drop为您的 hibernate.hbm2ddl.auto属性。

现在,我已经开始查询一章,将其用于“运行中的Hibernate Search”。它使用一组用于单元测试的新数据初始化数据库。JBoss
Seam在各种示例中也经常使用它。 import.sql是一个非常简单的功能,但有时非常有用。请记住,SQL可能取决于您的数据库(可移植性!)。

#import.sql file
delete from PRODUCTS
insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL,

DESCRIPTION) values (‘1’, ‘630522577X’, ‘My Fair Lady’, 19.98,
‘630522577X.jpg’, ‘My Fair blah blah…’);
insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL,
DESCRIPTION) values (‘2’, ‘B00003CXCD’, ‘Roman Holiday ‘, 12.98,
‘B00003CXCD.jpg’, ‘We could argue that blah blah’);

有关此功能的更多信息,请查看Eyal的博客(死链接的更新位置),他为此写了一篇很好的文章。请记住,如果要添加其他数据库对象(索引,表等),还可以使用
辅助数据库对象 功能。



 类似资料:
  • 问题内容: 我正在尝试提出一个要求区分大小写的结果的请求。 例如在我的数据库中 该请求是 但我有3行作为结果,我只想要abcdef 我试图找到一个解决方案 但是我有这个错误: 未知归类:’Latin1_General_CS_AS’{“成功”:false,“错误”:“#1273-未知归类:’Latin1_General_CS_AS’”} 谢谢 问题答案: 感谢您的帮助,我找到了不是latin1 ut

  • 问题内容: 我正在将Java应用程序的ORM的Hibernate用于Oracle数据库(并不是数据库供应商很重要,有一天我们可能会切换到另一个数据库),我想根据用户提供的字符串从数据库中检索对象。例如,在搜索人员时,如果用户正在寻找居住在“ fran”中的人员,我希望能够将其人员提供给旧金山。 SQL不是我的强项,我更喜欢Hibernate的构建代码,而不是硬编码的字符串。谁能指出正确的方向,说明

  • 问题内容: 我有一个Lucene索引,该索引当前区分大小写。我想添加的 选项 有不区分大小写作为后备的。这意味着与案例匹配的结果将获得更大的权重,并且将首先出现。例如,如果结果数限制为10,并且有10个匹配项符合我的情况,那就足够了。如果仅找到7个结果,则可以从不区分大小写的搜索中再添加3个结果。 我的案子实际上更复杂,因为我有不同重量的物品。理想情况下,匹配“错误”的表壳会增加一些重量。不用说,

  • 对于报告(0.1%的所有查询),我需要返回一个所有可能类别的列表,区分大小写! 考虑以下文件: 运行以下查询: 返回: 是否有方法返回区分大小写的类别(存储在文档中)?我对此查询结果中的感兴趣。 Elasticsearch论坛中的问题 谢谢,伊泰

  • 问题内容: 我想按不区分名称的名称搜索用户表中的数据。 我收到一个错误: 意外令牌:% 。我应该在哪里放置“%”? 问题答案: 您可以使用concat运算符: 或使用命名参数: (使用Spring Boot 1.4.3测试)