jpa-保存onetoone关系中的实体时出错

xn1cxnb4  于 2021-06-21  发布在  Mysql
关注(0)|答案(0)|浏览(329)

我正在用spring,maven,tomcat,mysql做一个研究项目。我想创建一个网站,用户可以登录和更新他们的设置,并根据这些设置,他们产生的东西。
目前登录工作正常,新用户可以注册并保存到数据库中。现在,我创建了一个新实体,并在两个表之间进行了一对一的关联—一个表包含登录详细信息,如密码和用户名,另一个表包含此用户的设置。我面临的问题是:
我在带有vaadin的ui中有一些textfield和combobox-我填充字段并单击save
活页夹将这些设置传递给保存对象的服务
它获取当前登录的用户并从数据库中加载它
sql尝试保存对象时抛出错误:
原因:java.sql.sqlexception:字段“user\u login\u id”没有默认值
以下是实体:

@Entity
@Table(name = "USERLOGIN")
public class UserLogin implements UserDetails {

  private static final long serialVersionUID = 1L;

  @Id
  @GeneratedValue(strategy=GenerationType.IDENTITY)
  @Column(name = "id")
  private Integer id;

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

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

  @OneToOne(mappedBy = "userlogin")
  private User user;

  public User getUser() {
    return user;
  }

  public void setUser(User user) {
    this.user = user;

**Other getters and setters**

}

@Entity
@Table(name = "USER")
public class User implements Serializable {

  private static final long serialVersionUID = 1L;

  @Id
  @GeneratedValue
  private Integer id;

  @Column(name = "meal")
  private Integer meal;

  @OneToOne
  @JoinColumn(name = "userlogin_id")
  private UserLogin userlogin;

  public UserLogin getUserLogin() {
    return userlogin;
  }

  public void setUserLogin(UserLogin userLogin) {
    this.userlogin = userLogin;
    userLogin.setUser(this);

**Other getters and setters**

}

保存设置的服务:

@Service
public class AddUserServiceImpl implements AddUserService{

  @Autowired
  private UserRepository userRepository;

  @Autowired
  private CurrentUserService currentUserService;

  public void saveUser(User userDAO) {

    User user = new User();
    user.setMeal(userDAO.getMeal());
    user.setUserLogin(currentUserService.getCurrentUser());

    userRepository.save(user);

  }

}

存储库扩展了jparepository:

@Repository
public interface UserRepository extends JpaRepository<User, Integer>{

}

最后是加载当前登录用户的服务和存储库:

@Service
public class CurrentUserServiceImpl implements CurrentUserService {

  @Autowired
  UserLoginRepository userLoginRepository;

  public String getCurrentUsername() {
    return SecurityContextHolder.getContext().getAuthentication().getName();
  }

  public UserLogin getCurrentUser() {
    return userLoginRepository.findByUserName(getCurrentUsername());
  }

}

@Repository
public interface UserLoginRepository extends JpaRepository<UserLogin, 
Integer> {

   @Query("select u from UserLogin u where u.username=:username")
   UserLogin findByUserName( @Param("username") String username);

}

如果有任何帮助,我将不胜感激。我对这个主题还很陌生。所以主要的目标是我想有一个表来存储当前登录用户的属性-这些设置应该可以随时更新。这方面有什么最佳做法吗?
谢谢您!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题