Пользовательское хранилище Intersystems Caché для постоянных объектов

У меня есть данные в глобальном формате в этом формате:

 ^kza("mltab","TAB","Dta",1,1)  =   3341
 ^kza("mltab","TAB","Dta",1,2)  =   "First Name"
 ^kza("mltab","TAB","Dta",1,3)  =   "type1"
 ^kza("mltab","TAB","Dta",1,4)  =   7400.11
 ^kza("mltab","TAB","Dta",2,1)  =   3614
 ^kza("mltab","TAB","Dta",2,2)  =   "Second Name"
 ^kza("mltab","TAB","Dta",2,3)  =   "type2"
 ^kza("mltab","TAB","Dta",2,4)  =   7600.11

Мой класс объектов выглядит так:

Class Kza.Employees Extends %Persistent [ StorageStrategy = EmpStorage ]
{

    Property num As %Integer; //unique identifier
    Property id As %Integer;
    Property num As %Integer;
    Property name As %String;
    Property type As %String;
    Property pay As %Double;
    Index NewIndex1 On id [ IdKey, PrimaryKey, Unique ];

    <Storage name="EmpStorage">
     <ExtentSize>100000</ExtentSize>
     <SequenceNumber>8</SequenceNumber>
     <SQLMap name="MasterMap">
       <ConditionalWithHostVars></ConditionalWithHostVars>
       <Data name="num">
         <Node>1</Node>
       </Data>
       <Data name="name">
         <Node>2</Node>
       </Data>
       <Data name="pay">
         <Node>4</Node>
       </Data>
       <Data name="type">
         <Node>3</Node>
       </Data>
       <Global>^kza</Global>
       <RowIdSpec name="1">
         <Expression>{L1}</Expression>
         <Field>id</Field>
       </RowIdSpec>
       <Subscript name="1">
         <Expression>"mltab"</Expression>
       </Subscript>
       <Subscript name="2">
         <Expression>"TAB"</Expression>
       </Subscript>
       <Subscript name="3">
         <Expression>"Dta"</Expression>
      </Subscript>
      <Subscript name="4">
         <Expression>{id}</Expression>
      </Subscript>
      <Type>data</Type>
    </SQLMap>
  <StreamLocation>^Kza.EmployeesS</StreamLocation>
  <Type>%CacheSQLStorage</Type>
</Storage>
}

Проблема в том, что если я сделаю

insert into Kza.Employees(id, num, name, pay, type) VALUES(132, 3214, 'Name Second', 89000, 'type5')

результат:

^kza("mltab","TAB","Dta",1) =   ""
^kza("mltab","TAB","Dta",1,1)   =   3214
^kza("mltab","TAB","Dta",1,2)   =   "Name Second"
^kza("mltab","TAB","Dta",1,3)   =   'type 5'
^kza("mltab","TAB","Dta",1,4)   =   89000

Но мне не нужно сохранять первую строку, поэтому КАК УСТРАНИТЬ СОХРАНИТЬ ЭТОТ УЗЕЛ:

^kza("mltab","TAB","Dta",1) = ""


person mrfazolka    schedule 03.02.2015    source источник


Ответы (1)


Попробуйте сделать свойство num, name, type или pay обязательным (если оно не может быть нулевым).
Caché определяет узел ^kza("mltab","TAB","Dta",1), потому что если остальные 4 поля пусты, наличие узла ^kza("mltab","TAB","Dta",1) определяет существование строки. Другими словами, если num, name, type или pay равны нулю и ^kza("mltab","TAB","Dta",1) не определена, строка не будет определена.

person davevdg    schedule 06.04.2015