Hibernate注释-不区分大小写的UniqueConstraint
我有一个实体,其注释如下:Hibernate注释-不区分大小写的UniqueConstraint,hibernate,postgresql,Hibernate,Postgresql,我有一个实体,其注释如下: @Entity @Table(uniqueConstraints={@UniqueConstraint(columnNames={"name"})}) public class Component extends Model { ... } 是否可以使UniqueConstraint不区分大小写?我们使用的是PostgreSQL。对于PostgreSQL,您确实可以这样做来实现您的需求: CREATE UNIQUE INDEX My_Index on Com
@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
功能。从博客帖子:
import.sql:在单元测试中轻松导入数据
Hibernate有一个简洁的小特性
这在很大程度上缺乏文件记录和
不知道。您可以执行SQL脚本
在会话工厂
创建期间
就在数据库模式之后
以新格式导入数据的生成
数据库您只需要添加一个文件
在类路径中命名为import.sql
根目录并设置create
或
create drop
作为您的
hibernate.hbm2ddl.auto
属性
我使用它来进行中的Hibernate搜索
现在我已经开始行动了
查询章节。它初始化了我的
具有一组新数据的数据库,用于
我的单元测试。JBossSeam也使用它
在各种各样的例子中有很多。
import.sql
是一个非常简单的功能
但这在当时是非常有用的。记得
SQL可能依赖于
你的数据库(啊,可移植性!)
有关此的详细信息,请参见
特征,检查(),他
写了一篇很好的小文章。
记住,如果你想添加额外的
数据库对象(索引、表和
依此类推),您还可以使用
特色
我建议从不同的角度来解决这个问题:
@NotEmpty
@列(nullable=false)
私有字符串名称;
@实体
@表(uniqueConstraints={@UniqueConstraint(columnNames={“lcname”})})
公共类组件扩展模型{
...
}
public void集合名(字符串名){
this.name=名称;
this.lcname=name.toLowerCase();
}
更改对从数据库中获取实体的任何人都是完全透明的,因为lcname是私有的,并且没有getter,而原始getName将返回最初由创建它的客户端提供的原始名称。在PostgreSQL中是可能的,但我不知道您如何告诉Hibernate。在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');