代码之家  ›  专栏  ›  技术社区  ›  Matthew Taylor

更新会导致一对多表中的行被复制,而不仅仅是被更新

  •  0
  • Matthew Taylor  · 技术社区  · 4 年前

    我正在尝试修改其他人编写的大量代码的一部分。我不知道我在做什么。

    我有一个一对多的关系:code表中的每个条目在code\u属性表中可以有许多条目。我试着包含一个最小的例子(如下),但它是不可执行的,因为我没有技能,使它这样。

    我的问题是,每次更新代码表中的条目时,都会添加一个新的集合(即使没有任何更改),而不是只更新代码\属性表中的关联条目。然后似乎有一些代码来清理这个问题。

    mysql> select * from code_property where code_id=341965;
    +----------+-----------------------+-------------------------------------+---------+
    | id       | name                  | property                            | code_id |
    +----------+-----------------------+-------------------------------------+---------+
    | 37187304 | incisivRunOptions     | -access +rw                         |  341965 |
    | 37187305 | designTabsActiveIndex | 1                                   |  341965 |
    | 37187306 | incisivCompileOptions | -timescale 1ns/1ns -sysv -f files.f |  341965 |
    | 37187307 | incisivRunOptions     | -access +rw                         |  341965 |
    | 37187308 | designTabsActiveIndex | 1                                   |  341965 |
    | 37187309 | incisivCompileOptions | -timescale 1ns/1ns -sysv -f files.f |  341965 |
    +----------+-----------------------+-------------------------------------+---------+
    6 rows in set (0.00 sec)
    

    我有两个问题:

    1. 我不能期望它只更新code\u属性表而不创建新条目吗?(如果做得对的话。)

    2. @Entity
      @Table(name = "code")
      public class Code extends NamedDatedEntity implements Cloneable {
      
          @Id
          @GeneratedValue(strategy = GenerationType.IDENTITY)
          @Min(value = 0)
          @Column(name = "id")
          private long id;
      
          @ManyToOne
          @JoinColumn(name = "user_id", referencedColumnName = "id")
          @JsonIgnore
          private User user;
      
          @OneToMany(mappedBy = "code", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
          @MapKey(name = "name")
          private Map<String, CodeProperty> properties;
      
      
      @Entity
      @Table(name = "code_property")
      public class CodeProperty extends Property implements Cloneable{
      
          @Id
          @GeneratedValue(strategy = GenerationType.IDENTITY)
          @Min(value = 0)
          @Column(name = "id")
          private long id;
      
          @ManyToOne
          @JsonIgnore
          private Code code;
      
      
      
    0 回复  |  直到 4 年前