【发布时间】:2020-07-10 09:02:58
【问题描述】:
我是 Hibernate 和 JPA 的新手(我主要使用 JDBC 进行存储过程集成。)。我创建了两个具有 OneToOne 关系的实体 User 和 UserPassword。我试图在两个表(MySQL DB)中存储值,但 UserPassword 表的 UserId(foreign_key)列存储 null 而密码被存储。请纠正我在以下代码中的错误:
@Entity
@Table(name = "User")
public class User implements Serializable{
private static final long serialVersionUID = -3366411610525655274L;
@Column(name = "UserId", nullable = false,unique = true)
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@GeneratedValue(generator = "uuid2")
@Id
@Type(type="uuid-char")
private UUID userId;
@Embedded
private Name name;
@Column(name = "DateOfBirth", nullable = false)
private Date dob;
@OneToOne(mappedBy="user", cascade=CascadeType.ALL)
private Password password;
public Password getPassword() {
return password;
}
public void setPassword(Password password) {
this.password = password;
}
public UUID getUserId() {
return userId;
}
public void setUserId(UUID userId) {
this.userId = userId;
}
public Name getName() {
return name;
}
public void setName(Name name) {
this.name = name;
}
public Date getDob() {
return dob;
}
public void setDob(Date dob) {
this.dob = dob;
}
}
和
@Entity
@Table(name= "UserPassword")
public class Password implements Serializable{
private static final long serialVersionUID = -8990341903052492314L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="PasswordId")
private Long Id;
@Column(name="Password")
private String password;
@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn(name="UserId", referencedColumnName="UserId")
private User user;
public Long getId() {
return Id;
}
public void setId(Long id) {
Id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
这些是我的 JPA 存储库:
public interface UserRepository extends JpaRepository<User, UUID>{
}
和
public interface PasswordRepository extends JpaRepository<Password, Long>{
}
以及将实体保存在数据库中的服务层代码:
public void insertUsers(List<User> users) {
List<com.poc.entity.User> usersData = ObjectMapperUtils.mapAll(users, com.poc.entity.User.class);
userRepository.saveAll(usersData);
}
另外,请帮助我为这项工作制定正确的设计方法。
【问题讨论】:
-
您在密码实体中设置用户属性?
-
是的,我没有设置它,这是错误的。谢谢!!
标签: java spring-boot hibernate spring-data-jpa spring-data