2012-10-15 57 views
0

我遇到了使用遗留数据库的问题。 我与关系连接的两个表:一个 - 到 - 多: 表订阅者:grails与遗留数据库。外键作为主键的一部分

create table SUBSCRIBERS 
(
    SUBSCRIBERCODE VARCHAR2(100) not null, 
    SUBSCRIBERNAME VARCHAR2(100), 
    ACTIVE   CHAR(1) default 'Y' not null 
) 
alter table SUBSCRIBERS 
    add constraint SUBSCRIBERS_PK primary key (SUBSCRIBERCODE); 

表Subscriberscontacts:

create table SUBSCRIBERSCONTACTS 
(
    SUBSCRIBERCODE VARCHAR2(100) not null, 
    CONTACTTYPE VARCHAR2(100) not null, 
    ORDER_ID  NUMBER not null, 
    CONTACTVALUE VARCHAR2(100) not null, 
    ACTIVE   CHAR(1) default 'Y' not null 
) 
alter table SUBSCRIBERSCONTACTS 
    add constraint SUBSCRIBERSCONTAC1 primary key (SUBSCRIBERCODE, CONTACTTYPE, ORDER_ID); 
alter table SUBSCRIBERSCONTACTS 
    add constraint SUBSCRIBER_SUBS_FK foreign key (SUBSCRIBERCODE) 
    references SUBSCRIBERS (SUBSCRIBERCODE); 

表SUBSCRIBERSCONTACTS具有复合主键 - (SUBSCRIBERCODE,CONTACTTYPE,ORDER_ID) 。它还具有对SUBSCRIBERS(SUBSCRIBERCODE)的外键引用。 SUBSCRIBERCODE是SUBSCRIBERSCONTACTS主键的一部分。

我创建了两个GORM域类:

package tmsconf 

class Subscribers { 

String id 

String subscribercode 
String subscribername 
String active 

static hasMany = [subscriberscontacts:Subscriberscontacts] 

static mapping = { 
version false 
id generator: 'assigned', name: 'subscribercode' 
} 


static constraints = { 
subscribercode(size:1..100, blank: false) 
subscribername(size:0..100, nullable: true) 
active(size:1..1, blank: false) 
} 

public void setSubscribercode(String subscribercode){ 
this.subscribercode = subscribercode 
this.id = subscribercode 
} 

String toString() { 
subscribercode 
} 

} 

package tmsconf 

class Subscriberscontacts implements Serializable{ 

String id 

Subscribers subscribers 
String contacttype 
Long order_id 
String contactvalue 
String active 

static mapping = { 
version false 

id composite: ["subscribercode", "contacttype","order_id"], generator: "assigned" 

subscribers name : 'subscribercode', column : 'subscribercode', insertable: false, updateable: false 

} 

public String getSubscribercode() 
{ 
    subscribers 
} 


static constraints = { 
contacttype(size:1..100, blank: false) 
contactvalue(size:1..100, blank: false) 
active(size:1..1, blank: false) 
} 

public void setSubscribercode(String subscribercode){ 
this.subscribercode = subscribercode 
this.id = subscribercode 
} 


String toString() { 
subscribercode 
} 


} 

我生成的所有要求:Grails的生成,所有*。

然后我尝试运行新的Grails应用程序,并有例外:

Caused by PropertyNotFoundException: Could not find a getter for subscribercode in class tmsconf.Subscriberscontacts 
->> 334 | innerRun in java.util.concurrent.FutureTask$Sync 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 166 | run  in java.util.concurrent.FutureTask 
| 1110 | runWorker in java.util.concurrent.ThreadPoolExecutor 
| 603 | run  in java.util.concurrent.ThreadPoolExecutor$Worker 
^ 722 | run . . . in java.lang.Thread 

我不想subscribercode属性添加到Subscriberscontacts域类,因为如果我这样做,我将得到subscribercode编辑字段创建表单。

回答

0

添加它,只是从脚手架隐藏:

class Subscriberscontacts { 
    String subscribercode 
    ... 
    static constraints = { 
    subscribercode display: false // or editable: false 
    } 
} 
+0

感谢名单!我添加了订户代码。现在,我在向订阅者添加记录时出现错误:[订阅者代码]класса[class tmsconf.Subscriberscontacts]неможетиметьзначениеnull – Leonid

+0

+',nullable:true',因为它默认为false。 –

+0

我有错误:不允许NULL列“SUBSCRIBERCODE”; SQL语句:插入到订户联系人(活动,联系人值,订户代码,联系人类型,订单号)值。 ** Subscribercode - 是主键和外键的一部分** – Leonid