我正在尝试映射一个只有唯一键的表(Oracle Forms 时代的旧版),因为某些值可以为空。用户可以选择其他应用程序中的数据是否以 char 或 number 形式存在,并且表具有两个字段(一个 varchar2 和其他数字)。
可以为此使用域类吗?
例子
Mytable
---------------------------------------------------------------
office_schedule_id NUMBER(5) NOT NULL
office_company_char VARCHAR2(6)
office_schedule_char VARCHAR2(10)
office_company_num NUMBER(6)
office_schedule_num NUMBER(5)
default VARCHAR2(1)
唯一约束由除“default”之外的所有字段组成。
我试过这个:
class OfficeSchedule {
int officeScheduleId
String officeScheduleName
static mapping = {
version false
table 'office_schedules'
id column: 'office_schedule_id', name: 'officeScheduleId'
}
static hasMany = [ schedules : IntegrationSchedules ]
}
//this represents MyTable
class IntegrationSchedules {
String officeCompanyChar
String officeScheduleChar
Integer officeCompanyNum
Integer officeScheduleNum
String default
static belongsTo = [ officeSchedule : OfficeSchedule ]
int hashCode() {
def builder = new HashCodeBuilder()
//added all fields of the unique key
builder.toHashCode()
}
static mapping = {
version false
table 'mytable'
id composite: ['officeSchedule','officeCompanyChar','officeScheduleChar','officeCompanyNum','officeScheduleNum']
officeSchedule(column:'office_schedule_id')
}
}
当我尝试查询时,56 条记录中只有 5 条返回
println IntegrationSchedules.findAll().size() //prints 5 but table have 56
我尝试删除与 OfficeSchedule 的关系,但仍然只返回五行。
然后我注意到返回的行是因为它们通知了所有字段,这是有道理的,因为我将键定义为好像它是一个 PK。
我无法更改表格,因为是使用它的旧应用程序。
我认为的一种解决方法是将其转换为 groovy bean 并使用服务来创建对象,但是我不能使用标准和 GORM findBy 方法。