Когда я обновляю одну таблицу, она вставляет значение сопоставленной таблицы в отображение гибернации. - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть две модели, UserModel и RoleModel, которые сопоставлены с отношением @OneToOne. Когда я обновляю данные пользователя, он сначала вставляет данные в таблицу ролей, а затем обновляет эти новые роли до UserModel.

UserModel. java

package com.example.demo.Model;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name="Users")
public class UserModel {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private Integer id;

    @Column(name="name")
    private String name;

    @Column(name="address")
    private String address;

    @JoinColumn(name = "role", insertable=false, nullable = false, updatable = false)
    @OneToOne(cascade = CascadeType.ALL)
    private RoleModel roleModel;


    public UserModel() {
    }

    public UserModel(Integer id, String name, String address,RoleModel roleModel) {
        super();
        this.id = id;
        this.name = name;
        this.address = address;
        this.roleModel = roleModel;
    }

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public RoleModel getRoleModel() {
        return roleModel;
    }
    public void setRoleModel(RoleModel roleModel) {
        this.roleModel = roleModel;
    }
}

RoleModel. java

package com.example.demo.Model;

    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.OneToOne;
    import javax.persistence.Table;

    @Entity
    @Table(name="Roles")
    public class RoleModel {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="role")
        private Integer role;

        @Column(name="rolename")
        private String roleName;

        @OneToOne(mappedBy = "roleModel")
        private UserModel userModel;


        public RoleModel() {
        }


        public RoleModel(Integer role, String roleName) {
            super();
            this.role = role;
            this.roleName = roleName;
        }


        public Integer getRole() {
            return role;
        }
        public void setRole(Integer role) {
            this.role = role;
        }
        public String getRoleName() {
            return roleName;
        }
        public void setRoleName(String roleName) {
           this.roleName = roleName;
        }
    }

Я хочу обновить UserModel вместе с ролью, но здесь RoleModel вставляет новую строку, а затем обновляет. Помоги мне в этом. Скажите мне точный код, который я должен использовать, чтобы обновлять данные только из UserModel связанной роли.

1 Ответ

0 голосов
/ 04 февраля 2020

Сначала я бы порекомендовал изучить, как работают аннотации весенних отношений. Вы заявляете, что RoleModel не должен ни вставляться, ни обновляться, когда вы манипулируете этим объектом внутри UserModel, поэтому даже если вы измените правильную информацию с желаемыми значениями, она не будет отражена на стороне БД.

@JoinColumn(name = "role", insertable=false, nullable = false, updatable = false)

Итак, если вы удалите insertable=false и updatable=false из сопоставления, оно будет работать (учитывая, что сопоставлен и правый столбец).

Кроме того, я рекомендую изучить некоторые учебник о сопоставлениях Spring JPA «один-к-одному» .

...