【发布时间】:2022-01-20 05:53:43
【问题描述】:
我是 JPA 的新手, 这可能是基本问题
我创建了两个实体 Java 类:Users 和 Role
在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 表中保存一些额外的审计值。
问题:在新的关系表中 我收到重复的条目,
我试过了 saveandflush user 和 save userRole 和 @jointable 中的 insertable=false updatable=false
提前致谢
【问题讨论】:
-
在您的代码中您编写了
userRole.setUserId,但我在UserRole中看不到userId 字段。如果您遗漏了它,请不要这样做。请使用您的课程字段更新您的帖子。不要认为某些事情不相关并发布较少的信息,大多数时候缺少信息是某些事情无法正常工作的原因 -
如前所述,我已经添加了 UserRole 类。
标签: java postgresql spring-boot hibernate spring-data-jpa