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