gpt4 book ai didi

java - 映射遗留模型 - 仅具有唯一约束的表可以用作域类?

转载 作者:行者123 更新时间:2023-12-01 15:23:14 25 4
gpt4 key购买 nike

我正在尝试映射一个只有唯一键的表(Oracle Forms 时代遗留下来的),因为某些值可能为空。用户可以选择其他应用程序中的数据是否以字符或数字形式存在,并且表有两个字段(一个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 的关系,但仍然只返回五行。

然后我注意到返回的行是因为它们已通知所有字段,这是有道理的,因为我将 key 定义为 PK。

我无法更改该表,因为旧应用程序正在使用它。

我认为的一个解决方法是将其转换为常规 bean 并使用服务来创建对象,但这样我就无法使用标准和 GORM findBy 方法。

最佳答案

你最好的选择是浏览 hibernate 文档(并进行谷歌搜索),寻找一种机制来在普通的 hibernate 中映射它。一旦您在 hibernate 中找到了解决方案(并且 hibernate 非常努力地保持灵 active ,以便可以在遗留数据库上使用),那么请返回 gorm 并尝试确定 gorm 是否公开相同的功能。至少,它可以允许您构建一个邮件列表查询,该查询将生成此查询不会生成的响应。有很多 gorm 没有很好的文档记录,因此了解 gorm DSL 如何映射到 hibernate 配置对于对如何在 gorm 中完成它进行有根据的猜测至关重要

关于java - 映射遗留模型 - 仅具有唯一约束的表可以用作域类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10557451/

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