我在尝试将Grails应用程序与AS400 / DB2数据库放在一起时遇到了一个问题。我无法映射大多数文件,因为它们没有唯一的字段可用作id。即使他们这样做,他们也是基于文本的字段,而不是可以转换为长类型的格式。 (我不明白为什么PK必须是一个长数据类型?如果你想给我们一个序列或AI的pk,那将是有意义的,但如果你只需要一个独特的键怎么办?我在这里遗漏了什么?)
我想知道是否可以保留我已设置的数据源,并且只使用它来直接对数据库进行SQL访问而不必使用域对象?
我见过的东西是将域对象设置为瞬态。但我不知道你是否仍然可以在没有id字段的情况下做同样的事情。有谁知道它是如何工作的?
有什么想法吗?
谢谢, 乔恩
答案 0 :(得分:3)
主键不需要很长,它只是Hibernate和Grails的标准。您可以将具有域类的唯一varchar列作为主键处理,如下所示:
class Person {
String username
String firstName
String lastName
static mapping = {
id name: 'username', generator: 'assigned'
version false
}
}
这适用于此DDL定义的表:
create table person (
username varchar(255) not null,
first_name varchar(255) not null,
last_name varchar(255) not null,
primary key (username)
);
我添加了'version false',因为它是一个遗留系统,你可能没有'版本'乐观锁定列。
答案 1 :(得分:3)
您可以非常轻松地访问数据库,出于性能原因,我们在某些情况下也会这样做:
class SomeService {
def dataSource;
def nativeAccessMethod = {
def sql = new Sql(dataSource);
def rows = sql.rows("select * from myTable");
/* processing continues ...*/
}
}
Groovy的native SQL support也很不错。