首页 > 解决方案 > 更新导致一对多表中的行被复制而不是仅仅被更新

问题描述

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

我有一个一对多的关系:代码表中的每个条目都可以在 code_property 表中有许多条目。我试图包含一个最小的示例(如下),但它是不可执行的,因为我没有这样做的技能。

我的问题是,每次更新代码表中的条目时,而不是仅更新 code_property 表中的关联条目,而是添加一个新集合(即使没有任何更改)。然后似乎有一些代码可以清除它。

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_property 表而不创建新条目吗?(如果做得对的话。)

  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;
    
    
    

标签: javaopenjpa

解决方案


推荐阅读