我正在用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);
}
如果有任何帮助,我将不胜感激。我对这个主题还很陌生。所以主要的目标是我想有一个表来存储当前登录用户的属性-这些设置应该可以随时更新。这方面有什么最佳做法吗?
谢谢您!
暂无答案!
目前还没有任何答案,快来回答吧!