дублирование ent-go o2m upsert

Я пытаюсь обновить таблицу A с отношениями к таблице B, а также обновить через структуру ent-go с Postgres.

              
CmdbCiServerVmwareVirtualMachine:
        +----------------+--------------------------------+--------+----------+----------+---------+---------------+-----------+---------------------------------+------------+---------+
        |     Field      |              Type              | Unique | Optional | Nillable | Default | UpdateDefault | Immutable |            StructTag            | Validators | Comment |
        +----------------+--------------------------------+--------+----------+----------+---------+---------------+-----------+---------------------------------+------------+---------+
        | id             | uuid.UUID                      | false  | false    | false    | true    | false         | false     | json:"id,omitempty"             |          0 |         |
        | created_at     | time.Time                      | false  | false    | false    | true    | false         | true      | json:"created_at,omitempty"     |          0 |         |
        | updated_at     | time.Time                      | false  | false    | false    | true    | true          | false     | json:"updated_at,omitempty"     |          0 |         |
        | deleted_at     | time.Time                      | false  | true     | false    | false   | true          | false     | json:"deleted_at,omitempty"     |          0 |         |
        | sysId          | uuid.UUID                      | true   | false    | false    | false   | false         | false     | json:"sysId,omitempty"          |          0 |         |
        | name           | string                         | false  | true     | false    | false   | false         | false     | json:"name,omitempty"           |          0 |         |
        | vCpu           | int                            | false  | true     | false    | false   | false         | false     | json:"vCpu,omitempty"           |          0 |         |
        | coresPerSocket | int                            | false  | true     | false    | false   | false         | false     | json:"coresPerSocket,omitempty" |          0 |         |
        | memory         | int                            | false  | true     | false    | false   | false         | false     | json:"memory,omitempty"         |          0 |         |
        | hwVersion      | string                         | false  | true     | false    | false   | false         | false     | json:"hwVersion,omitempty"      |          0 |         |
        | guestOS        | string                         | false  | true     | false    | false   | false         | false     | json:"guestOS,omitempty"        |          0 |         |
        | guestOSFamily  | string                         | false  | true     | false    | false   | false         | false     | json:"guestOSFamily,omitempty"  |          0 |         |
        | guestOSFqdn    | string                         | false  | true     | false    | false   | false         | false     | json:"guestOSFqdn,omitempty"    |          0 |         |
        | powerState     | string                         | false  | true     | false    | false   | false         | false     | json:"powerState,omitempty"     |          0 |         |
        | customFields   | []struct { Key int             | false  | false    | false    | false   | false         | false     | json:"customFields,omitempty"   |          0 |         |
        |                | "json:\"Key\""; Value string   |        |          |          |         |               |           |                                 |            |         |
        |                | "json:\"Value\"" }             |        |          |          |         |               |           |                                 |            |         |
        | data           | vmware.VCenterVirtualMachine   | false  | true     | false    | false   | false         | false     | json:"data,omitempty"           |          0 |         |
        +----------------+--------------------------------+--------+----------+----------+---------+---------------+-----------+---------------------------------+------------+---------+
        +--------+---------------------------------------------+---------+---------+----------+--------+----------+---------+
        |  Edge  |                    Type                     | Inverse | BackRef | Relation | Unique | Optional | Comment |
        +--------+---------------------------------------------+---------+---------+----------+--------+----------+---------+
        | fields | CmdbCiServerVmwareVirtualMachineCustomField | false   |         | O2M      | false  | true     |         |
        +--------+---------------------------------------------+---------+---------+----------+--------+----------+---------+
        
CmdbCiServerVmwareVirtualMachineCustomField:
        +------------+-----------+--------+----------+----------+---------+---------------+-----------+-----------------------------+------------+---------+
        |   Field    |   Type    | Unique | Optional | Nillable | Default | UpdateDefault | Immutable |          StructTag          | Validators | Comment |
        +------------+-----------+--------+----------+----------+---------+---------------+-----------+-----------------------------+------------+---------+
        | id         | uuid.UUID | false  | false    | false    | true    | false         | false     | json:"id,omitempty"         |          0 |         |
        | created_at | time.Time | false  | false    | false    | true    | false         | true      | json:"created_at,omitempty" |          0 |         |
        | updated_at | time.Time | false  | false    | false    | true    | true          | false     | json:"updated_at,omitempty" |          0 |         |
        | deleted_at | time.Time | false  | true     | false    | false   | true          | false     | json:"deleted_at,omitempty" |          0 |         |
        | sysId      | uuid.UUID | false  | false    | false    | false   | false         | false     | json:"sysId,omitempty"      |          0 |         |
        | key        | int       | false  | false    | false    | false   | false         | false     | json:"key,omitempty"        |          0 |         |
        | value      | string    | false  | true     | false    | false   | false         | false     | json:"value,omitempty"      |          0 |         |
        +------------+-----------+--------+----------+----------+---------+---------------+-----------+-----------------------------+------------+---------+
        +----------------+----------------------------------+---------+---------+----------+--------+----------+---------+
        |      Edge      |               Type               | Inverse | BackRef | Relation | Unique | Optional | Comment |
        +----------------+----------------------------------+---------+---------+----------+--------+----------+---------+
        | virtualMachine | CmdbCiServerVmwareVirtualMachine | true    | fields  | M2O      | true   | true     |         |
        +----------------+----------------------------------+---------+---------+----------+--------+----------+---------+


Как видите, у меня есть Edge, и мой индекс уникален для sys_id и ключа в таблице полей.

      // Indexes of the CmdbCiServerVmwareVirtualMachineCustomField.
func (CmdbCiServerVmwareVirtualMachineCustomField) Indexes() []ent.Index {
    return []ent.Index{
        index.Fields("key", "sysId").
            Edges("virtualMachine").Unique(),
    }
}

Следующий код, кажется, создает строки/отношения в порядке, однако он не будет обновлен при втором запуске - только дублируется и дает запись NULL в столбце отношений.

Я использую следующий код:

http://pastie.org/p/6vx6yugIWwlChKmSSJNPIs

0 ответов

Другие вопросы по тегам