Coldfusion Form复合密钥未更新

Coldfusion Form复合密钥未更新,orm,coldfusion,coldfusion-9,Orm,Coldfusion,Coldfusion 9,我有一个正在使用的遗留数据库,只能对其进行有限的更改。这里的问题是,我有一个带有复合键列reportnum和后缀的表。我已经设置好了,这样可以正确设置触发器和序列的值。因此,当我使用model.new()然后使用model.save()插入新值时,值会正确地保存到数据库中,但问题是,当我查看模型中的值时,reportnum和后缀是空字符串 我尝试创建一个新的主键,并将旧键转换为索引,但这会破坏与其他模型的关系 寻找如何处理这一问题的建议。谢谢下面是我如何制作触发器的链接。 ORM模型: com

我有一个正在使用的遗留数据库,只能对其进行有限的更改。这里的问题是,我有一个带有复合键列reportnum和后缀的表。我已经设置好了,这样可以正确设置触发器和序列的值。因此,当我使用model.new()然后使用model.save()插入新值时,值会正确地保存到数据库中,但问题是,当我查看模型中的值时,reportnum和后缀是空字符串

我尝试创建一个新的主键,并将旧键转换为索引,但这会破坏与其他模型的关系

寻找如何处理这一问题的建议。谢谢下面是我如何制作触发器的链接。

ORM模型:

component entityName="report" persistent="true" extends="coldbox.system.orm.hibernate.ActiveEntity" table="REPORTS" schema="myschema" {
    property name="reportnum" fieldtype="id" ; 
    property name="suffix" fieldtype="id" ; 
    property name="status"; 

    //Plus other properties...

    property name="parcels" 
        fieldtype="one-to-many" 
        type="array" 
        cfc="parcel" 
        singularname="parcel" 
        fkcolumn="reportnum,suffix" 
        column="reportnum,suffix"
            cascade="save-update";
}

component entityName="parcel" persistent="true" extends="coldbox.system.orm.hibernate.ActiveEntity" table="PARCELS" schema="myschema" {
    property name="parcel_id" column="parcelid" fieldtype="id" generator="sequence" sequence="myschema.seq1_parcels";
    property name="parcelnum";
    property name="reportnum";
    property name="suffix";
    //Plus other properties...
}
表:

CREATE TABLE reports(
    REPORTNUM      NUMBER(11),
    SUFFIX         NUMBER(11),
    STATUS         VARCHAR2(8),
;

ALTER TABLE REPORTS ADD ( CONSTRAINT PK_REPORTS PRIMARY KEY (REPORTNUM, SUFFIX));

CREATE SEQUENCE SEQ1_REPORTS MAXVALUE 1E28 START WITH 1;

CREATE OR REPLACE TRIGGER "TRG1_REPORTs" BEFORE INSERT ON
myschema.REPORTS FOR EACH ROW
BEGIN
    IF coalesce( :NEW.reportnum, -1 ) = -1 THEN
        SELECT myschema.seq1_REPORTs.NEXTVAL INTO :NEW.reportnum FROM dual;
        :NEW.SUFFIX := 0;
    elsif coalesce(:NEW.suffix,-1) = -1 then
        --If only a report number is given make the suffix 1 larger then the max found.
        SELECT MAX(suffix)+1
        INTO :NEW.suffix FROM myschema.REPORTS WHERE reportnum = :NEW.reportnum;
    END IF;
END;

/

CREATE OR REPLACE TRIGGER "TRG2_REPORTs" BEFORE update ON
myschema.REPORTS FOR EACH ROW
BEGIN
    IF coalesce( :OLD.REPORTid, -1 ) = -1 THEN
        SELECT myschema.seq2_REPORTs.NEXTVAL INTO :NEW.REPORTid FROM dual;
    END IF;
END;

/

CREATE OR REPLACE TRIGGER TRG1_REPORTs" BEFORE INSERT ON
myschema.REPORTS FOR EACH ROW
BEGIN
    IF coalesce( :NEW.reportnum, -1 ) = -1 THEN
        SELECT myschema.seq2_REPORTs.NEXTVAL INTO :NEW.reportnum FROM dual;
        :NEW.SUFFIX := 0;
    elsif coalesce(:NEW.suffix,-1) = -1 then
        --If only a report number is given make the suffix 1 larger then the max found.
        SELECT MAX(suffix)+1
        INTO :NEW.suffix FROM myschema.REPORTS WHERE reportnum = :NEW.reportnum;
    END IF;
END;

/


CREATE TABLE PARCELS (
    PARCELID       NUMBER(11) NOT NULL,
    PARCELNUM      NUMBER(11),
    REPORTNUM      NUMBER(11) DEFAULT 0,
    SUFFIX         NUMBER(11) DEFAULT 0,
    --Plus other properties...
;

ALTER TABLE PARCELS ADD ( CONSTRAINT PK_PARCELS PRIMARY KEY (PARCELID));

CREATE OR REPLACE TRIGGER "trg1_parcels" BEFORE INSERT ON
myschema.parcels FOR EACH ROW
BEGIN
    IF coalesce( :NEW.parcelid, -1 ) = -1  THEN
        SELECT myschema.seq1_parcels.NEXTVAL INTO :NEW.parcelid FROM DUAL;  
    END IF;
END;

/

Oracle 11和Coldfusion 9的当前版本。

如果您与@SamFarmer共享一些代码,那么解决问题就会容易得多。你可以发布你的CFC吗?至少是属性,还有你调用的任何方法,这样我们就可以看到你做了什么。