我正在尝试映射只有Unique Key的表(来自Oracle Forms时间的遗留系统),因为某些值可能为null。用户可以选择其他应用程序中的数据是以char还是数字存在,并且该表具有两个字段(一个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方法。
答案 0 :(得分:1)
你最好的办法是浏览一下hibernate docs(并进行谷歌搜索),寻找一种机制来在普通的hibernate中映射它。一旦你有了一个hibernate的解决方案(并且hibernate需要相当大的灵活才能灵活使用它可以在遗留数据库中使用),然后回到gorm并尝试确定gorm是否公开了相同的功能。至少,它可能允许您构建一个邮件列表查询,该查询将生成响应,而不会生成响应。有很多内容没有详细记录,因此了解gorm DSL如何映射到休眠配置对于如何在gorm中进行有根据的猜测是至关重要的
答案 1 :(得分:0)
正如@ideasculptor所提到的,我的解决方案是创建一个hibernate映射:
的src /爪哇/域
@Entity
@Table(name = "mytable")
class IntegrationSchedules {
@Id()
@Type(type="string")
@Column(name="rowid")
private String rowid;
private String officeCompanyChar
private String officeScheduleChar
private Integer officeCompanyNum
private Integer officeScheduleNum
private String default
//getters & setters ommited
}
我必须创建一个hibernate配置(conf / hibernate中的hibernate.cfg.xml)
<!DOCTYPE hibernate-configuration SYSTEM
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<mapping package="domain" />
<mapping class="domain.IntegrationSchedules" />
</session-factory>
</hibernate-configuration>
有趣的是GORM的动态方法有效,例如:
IntegrationSchedules.findAll()