【问题标题】:Spring Jpa Creating Duplicate rows while Saving Parent save(parent )and Child Entity save(child)Spring Jpa在保存父保存(父)和子实体保存(子)时创建重复行
【发布时间】:2022-01-20 05:53:43
【问题描述】:

我是 JPA 的新手, 这可能是基本问题

我创建了两个实体 Java 类:UsersRole

Users 类中,我为用户@OneToOne 赋予了角色关系。

@Entity
@Table(name = "users")
public class Users implements Serializable {

    @OneToOne(fetch = FetchType.EAGER)
    @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"),
        inverseJoinColumns = @JoinColumn(name = "role_id"))
@Entity
@Table(name = "role")
public class Role  {
    @Column(name="role_id")
    private int roleId;
    
    @Column(name="role_name")
    private String roleName;
}
``
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;


@Entity
@IdClass(UserRoleId.class)
@Table(name = "user_role", schema = "labmodule")
public class UserRole {


    @Id
    @Column(name="role_id")
    private int roleId;
    
    
    @Id
    @Column(name = "user_id")
    private int userId;
    
    @Embedded
    private Audit audit;

    public int getRoleId() {
        return roleId;
    }
    public void setRoleId(int roleId) {
        this.roleId = roleId;
    }
    public int getUserId() {
        return userId;
    }
    public void setUserId(int userId) {
        this.userId = userId;
    }
    public UserRole(Audit audit) {
        super();
        this.audit = audit;
    }
    public UserRole() {
        
    }
    public Audit getAudit() {
        return audit;
    }

    public void setAudit(Audit audit) {
        this.audit = audit;
    }

}

``

我已经创建了一个用户存储库

@Repository
public interface UsersRepository extends JpaRepository<Users, Integer>

以类似的方式,我创建了角色存储库

@Repository
public interface RoleRepository extends CrudRepository<Role, String>

现在在添加新用户详细信息时。 我正在用户表中保存条目

user.setFromDate(new Timestamp(System.currentTimeMillis()));
user.setLoginDisabled(false);
Date date = new Date();
user.setActive(true);
userRepository.save(user);

UserRole userRole = new UserRole();
userRole.setRoleId(user.getRoles().getRoleId());
userRole.setUserId(user.getUserId());

userRole.setAudit(audit);
userRoleRepo.save(userRole);

我还想在 user_role 表中保存一些额外的审计值。

问题:在新的关系表中 我收到重复的条目,

enter image description here

我试过了 saveandflush user 和 save userRole 和 @jointable 中的 insertable=false updatable=false

提前致谢

【问题讨论】:

  • 在您的代码中您编写了userRole.setUserId,但我在UserRole 中看不到userId 字段。如果您遗漏了它,请不要这样做。请使用您的课程字段更新您的帖子。不要认为某些事情不相关并发布较少的信息,大多数时候缺少信息是某些事情无法正常工作的原因
  • 如前所述,我已经添加了 UserRole 类。

标签: java postgresql spring-boot hibernate spring-data-jpa


【解决方案1】:

因此,您没有将创建的用户角色与用户相关联。做这个: 首先保存一个用户角色,然后它将创建一个带有 ID 的用户角色。然后将该角色添加到用户对象中并保存。

UserRole userRole=   new  UserRole();
userRoleRepo.save(userRole);
user.setFromDate(new Timestamp(System.currentTimeMillis()));
user.setLoginDisabled(false);
Date date = new Date();
user.setActive(true);
user.setUserRole(userRole);

我还建议从一个用户到多个用户角色设置一对多,因为在大多数情况下,您必须让用户拥有多个角色。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    相关资源
    最近更新 更多