jst*_*ker 3 oracle grails uuid uniqueidentifier grails-orm
我想在我的所有Grails域上使用128位UUID而不是Longid字段.我宁愿不必在每个域上指定所有映射信息.有一种简单的方法可以通用/全局方式实现这一目标吗?我使用的是Grails 2.3.x,Hibernate 3.6.10.2插件,Database Migration Plugin 1.3.8和Oracle 11g(11.2.0.2.0).
似乎有许多与此相关的问题,但没有一个提供实际有效的完整,准确和最新的答案.
相关问题
jst*_*ker 11
如果要UUID在Grails域和RAW(16)数据库中使用a ,则需要添加以下内容.
对于每个域,请指定id字段.这是一个使用的例子ExampleDomain.groovy
class ExampleDomain {
UUID id
}
Run Code Online (Sandbox Code Playgroud)添加以下映射到 Config.groovy
grails.gorm.default.mapping = {
id(generator: "uuid2", type: "uuid-binary", length: 16)
}
Run Code Online (Sandbox Code Playgroud)
有关我选择的三个值的详细信息,请参阅这些链接.
在您的数据源条目中添加自定义方言Datasource.groovy.如果您使用的是Hibernate 4.0.0.CR5或更高版本,则可以跳过此步骤.
dataSource {
// Other configuration values removed for brevity
dialect = com.example.hibernate.dialect.BinaryAwareOracle10gDialect
}
Run Code Online (Sandbox Code Playgroud)实现您在步骤3中引用的自定义方言.这是BinaryAwareOracle10gDialect用Java实现的.如果您使用的是Hibernate 4.0.0.CR5或更高版本,则可以跳过此步骤.
package com.example.hibernate.dialect;
import java.sql.Types;
import org.hibernate.dialect.Oracle10gDialect;
public class BinaryAwareOracle10gDialect extends Oracle10gDialect {
@Override
protected void registerLargeObjectTypeMappings() {
super.registerLargeObjectTypeMappings();
registerColumnType(Types.BINARY, 2000, "raw($l)");
registerColumnType(Types.BINARY, "long raw");
}
}
Run Code Online (Sandbox Code Playgroud)
有关此更改的更多信息,请参阅相关的Hibernate缺陷https://hibernate.atlassian.net/browse/HHH-6188.
如果要UUID在Grails域和VARCHAR2(36)数据库中使用a ,则需要添加以下内容.
对于每个域,请指定id字段.这是一个使用的例子ExampleDomain.groovy.
class ExampleDomain {
UUID id
}
Run Code Online (Sandbox Code Playgroud)添加以下映射到 Config.groovy
grails.gorm.default.mapping = {
id(generator: "uuid2", type: "uuid-char", length: 36)
}
Run Code Online (Sandbox Code Playgroud)
有关这三个值的详细信息,请参阅上一节中步骤2中的链接.