這里是物體代碼:
@Entity
@Table(name = "t_user")
public class User{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)。
private Integer id;
//omit other fields
@OneToOne(cascade = javax.persistence.CascadeType.ALL, mappedBy = "user")
private Student student。
}
@Entity
@Table(name = "t_student")
public class Student{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@OneToOne
@JoinColumn(name = "c_user_id", referencedColumnName = "id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT), columnDefinition = "INT COMMENT 'user number'") /span>
private User user。
}
這里是保存代碼:
@Service
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl implementsUserService {
@Autowired
private final UserRepository userRepository。
@Autowired
private final PasswordEncoder pwdEncoder;
@Override
public Optional<UserBody> add(UserParam param) {
User user = User.from(param)。
if(userRepository.countByName(user.getName()) > 0){
throw new BusinessException("user already exists"/span>)。
}
user.setPassword(pwdEncoder.encode(param.getPassword()))。
userRepository.save(user);
user.getStudent().setUser(user); //這樣做是為了更新學生表中的`c_user_id`列。
return Optional.of(UserBody.from(user))。
}
如上所述,當我試圖保存一個用戶時,它將自動保存一個學生,但在t_student表中,列c_user_id是空的。所以我必須寫代碼user.getStudent().setUser(user)來更新列c_user_id。
那么為什么呢?我應該怎么做才能讓c_user_id列在保存用戶時自動填充
ps: 我不想把mappedBy關系改成Student,我知道這可能行得通,但我認為一個User可以是一個學生,也可以是另一個角色,所以如果我添加一些其他的角色,它將修改t_user表。這導致表變得越來越臃腫
uj5u.com熱心網友回復:
Student被持久化了。但是你指定Student負責維護Student和User之間的關系,并且由于Student.user是null,這被持久化在資料庫中。
因此,Hibernate實際上是在做你告訴它要做的事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/327137.html
標籤:
