Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA-在OneTONE关系中保存实体时出错_Java_Mysql_Spring_Hibernate_Spring Security - Fatal编程技术网

Java JPA-在OneTONE关系中保存实体时出错

Java JPA-在OneTONE关系中保存实体时出错,java,mysql,spring,hibernate,spring-security,Java,Mysql,Spring,Hibernate,Spring Security,我正在使用Spring、Maven、Tomcat和mySQL进行一个研究项目。我想创建一个网站,用户可以登录和更新他们的设置,并根据这些设置生成内容 目前登录工作正常,新用户可以注册并保存到数据库中。现在,我创建了一个新实体,并在两个表之间建立了一对一的关系——一个是包含登录详细信息(如密码和用户名)的表,另一个包含该用户的设置。我面临的问题是: 我有一些文本字段和组合框在用户界面与瓦丁-我填充字段,并单击保存 活页夹将这些设置传递给保存对象的服务 它获取当前登录的用户并从数据库中加载该用户

我正在使用Spring、Maven、Tomcat和mySQL进行一个研究项目。我想创建一个网站,用户可以登录和更新他们的设置,并根据这些设置生成内容

目前登录工作正常,新用户可以注册并保存到数据库中。现在,我创建了一个新实体,并在两个表之间建立了一对一的关系——一个是包含登录详细信息(如密码和用户名)的表,另一个包含该用户的设置。我面临的问题是:

  • 我有一些文本字段和组合框在用户界面与瓦丁-我填充字段,并单击保存
  • 活页夹将这些设置传递给保存对象的服务
  • 它获取当前登录的用户并从数据库中加载该用户
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>{

}
@存储库
公共接口用户存储库扩展了JpaRepository{
}
最后是加载当前登录用户的服务和存储库:

@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);

}
@服务
公共类CurrentUserServiceImpl实现CurrentUserService{
@自动连线
UserLoginRepository UserLoginRepository;
公共字符串getCurrentUsername(){
返回SecurityContextHolder.getContext().getAuthentication().getName();
}
公共用户登录getCurrentUser(){
返回userLoginRepository.findByUserName(getCurrentUsername());
}
}
@存储库
公共接口UserLoginRepository扩展了JpaRepository{
@查询(“从UserLogin u中选择u,其中u.username=:username”)
UserLogin findByUserName(@Param(“username”)字符串username);
}
如果有任何帮助,我将不胜感激。我对这个话题真的很陌生所以主要的目标是我想要一个表来存储当前登录用户的属性-这些设置应该可以随时更新。这方面有什么最佳做法吗?


谢谢大家!

检查您的
user\u login\u id
列是否有
auto increment
flagWOW,当我检查标记时,由于我的尝试,我使用的表有很多键。在删除表用户后,我可以进行保存。但是,当我再次单击保存时,发布的设置会生成重复的条目。稍作调整后,一切似乎都正常了。我仍然期待着其他的建议,如果这个代码可以做得更好或没有!非常感谢。