gpt4 book ai didi

hibernate - 带有自定义 hibernate 用户类型的 Grails hasMany 枚举

转载 作者:行者123 更新时间:2023-12-02 13:51:37 29 4
gpt4 key购买 nike

我有一个带有 hibernate 自定义用户类型的枚举:

enum Program { ABC(1000), XYZ(1001); final long code; ... }

class ProgramUserType implements org.hibernate.usertype.UserType { ... }

ProgramUserType 存储枚举的代码(1000、1001 等),并在从数据库读取时通过代码获取枚举实例。

这已成功用于域类中的关系:
class MyDomainOne {
Program program
...
static mapping = {
...
program column: 'PROGRAM_ID', type: ProgramUserType
...
}
}

所以,以上所有工作都很好。

但我想在 hasMany 关系中使用枚举:
class MyDomainTwo {
...
static hasMany = [
programs: Program
]
...
static mapping = {
...
programs joinTable: [name: 'BLAH_DOM_TWO_PROGS', key: 'DOM_TWO_ID', column: 'PROGRAM_ID']
...
}
}

我的问题是总是产生一个“varchar2(255 char)”类型的列:
BLAH_DOM_TWO_PROGS (DOM_TWO_ID number(19,0) not null, PROGRAM_ID varchar2(255 char));

我尝试了各种方法无济于事:
programs joinTable: [name: 'BLAH_DOM_TWO_PROGS', key: 'DOM_TWO_ID', column: 'PROGRAM_ID', type: ProgramUserType]

programs joinTable: [name: 'BLAH_DOM_TWO_PROGS', key: 'DOM_TWO_ID', column: 'PROGRAM_ID', type: ProgramUserType, sqlType: 'NUMBER(10,0)']

programs type: ProgramUserType, joinTable: [...]

等等

在连接表映射中使用自定义用户类型的正确语法是什么?

(我正在使用 grails 2.3.7)

最佳答案

我不知道你为什么要这么复杂,但是为了将代码(整数,长整数,字符串......)从枚举写入数据库列,你可以像这样简单地实现:

enum Program {
ABC(0, "ABC"),
XYZ(1, "XYZ"),

final String value
final Integer id

Program(Integer value, String selectValue) {
this.id = value
this.value = selectValue
}

//https://github.com/tudor-malene/Easygrid/issues/22
//shows value in select drop down
String toString() { value }

//stores value in database
Integer getId() { id }

//returns Enum constant associated with value
String getKey(){ name() }
}

代码的重要性行是 Integer getId() { id }您可以将 id 属性更改为您想要的任何类型。
希望有帮助

一些引用链接 GRAILS-3633in another discussion

关于hibernate - 带有自定义 hibernate 用户类型的 Grails hasMany 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25148324/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com