Java-从数据库获取用户名
我有一个侧项目网站,人们可以在那里对东西发表评论,现在我需要显示用户的评论和评论者的用户名。问题是我无法获取登录用户的用户名 注释示例: (一) 评论人-SheloJava-从数据库获取用户名,java,spring-boot,spring-security,spring-data-jpa,thymeleaf,Java,Spring Boot,Spring Security,Spring Data Jpa,Thymeleaf,我有一个侧项目网站,人们可以在那里对东西发表评论,现在我需要显示用户的评论和评论者的用户名。问题是我无法获取登录用户的用户名 注释示例: (一) 评论人-Shelo 测试评论 (二) 评论人-ProGa 测试评论2 现在的问题是,如果我尝试获取“当前登录”用户的用户名,那么当用户登录时,两条注释将具有相同的用户名 Authentication loggedInUser = SecurityContextHolder.getContext().getAuthentication(); String
测试评论 (二) 评论人-ProGa
测试评论2 现在的问题是,如果我尝试获取“当前登录”用户的用户名,那么当用户登录时,两条注释将具有相同的用户名
Authentication loggedInUser = SecurityContextHolder.getContext().getAuthentication();
String name = loggedInUser.getName();
上面的代码示例是您当前登录用户的方式。因此,如果我使用此代码并尝试通过字符串名称显示用户名,并且假设一些用户使用用户名登录-“Davos”,这两条注释将如下-:
(一)
达沃斯评论
测试评论
(二)
达沃斯评论
测试评论2
我需要的是-获取登录用户的用户名,如果他留下评论,显示他的用户名。当他注销或其他用户登录时,评论的“用户名”应保持不变,并且不得因当前登录的用户而改变
控制器类别(仅相关代码):
如评论中所述,您必须更改数据建模
例如,您可以实现如下内容:
@Entity
public class User {
@OneToMany()
public Collection<Comment> comments;
...
}
@Entity
public class Comment {
@ManyToOne
@JoinColumn(name="user_fk")
public User user;
...
}
@实体
公共类用户{
@OneToMany()
公众收集意见;
...
}
@实体
公开课评论{
@许多酮
@JoinColumn(name=“user\u fk”)
公共用户;
...
}
在这种情况下,您有一个双向关联,您可以通过代码(和html模板)获取用户表单的注释。当然,如果您是手动操作,您也必须更改您的DB模型 如评论中所述,您必须更改数据建模
例如,您可以实现如下内容:
@Entity
public class User {
@OneToMany()
public Collection<Comment> comments;
...
}
@Entity
public class Comment {
@ManyToOne
@JoinColumn(name="user_fk")
public User user;
...
}
@实体
公共类用户{
@OneToMany()
公众收集意见;
...
}
@实体
公开课评论{
@许多酮
@JoinColumn(name=“user\u fk”)
公共用户;
...
}
在这种情况下,您有一个双向关联,您可以通过代码(和html模板)获取用户表单的注释。当然,如果您是手动操作,您也必须更改您的DB模型 这是建模的基础。您需要通过向comment
实体添加userId
属性来添加对注释的作者的引用。然后,无论何时需要显示作者的姓名,都可以从数据库中查询Manh所说的是正确的。您已经有了一个从User
到Comments
的@OneToMany
关系,您所需要的就是添加一个从Comments
到User
的@manytone
关系。这是建模的基础。您需要通过向comment
实体添加userId
属性来添加对注释的作者的引用。然后,无论何时需要显示作者的姓名,都可以从数据库中查询Manh所说的是正确的。你已经有了一个从User
到Comments
的@OneToMany
关系,你所需要的就是添加一个从Comments
到User
的@ManyToOne
关系。所以我添加了@ManyToOne
关联,在创建Comments
后,它会正确地添加到数据库中。但是,当我试图通过-comment.getUser().getUserName()
访问注释的user
时,我得到了NullPointerException,为什么我需要更改DB模型?数据库中的注释表中是否有user\fk列?是的。我与User->User\u role->role
Menu->Menu\u component->components
Menu->Menu\u comments->comments
User->User\u comments->comments
有关联,我想我找到了获取用户名的正确途径,我会让你知道:)所以我添加了@ManyToOne
关联,在创建注释后,它被正确地添加到数据库中。但是,当我试图通过-comment.getUser().getUserName()
访问注释的user
时,我得到了NullPointerException,为什么我需要更改DB模型?数据库中的注释表中是否有user\fk列?是的。我与User->User\u role->role
Menu->Menu\u component->components
Menu->Menu\u comments->comments
User->User\u comments->comments
我想我找到了获取用户名的正确途径,我会让你知道:)
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "username")
private String userName;
@Column(name = "password")
private String password;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "email")
private String email;
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinTable(name = "users_role",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Role role;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinTable(name = "users_comments",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "comment_id"))
private List<Comments> comments = new ArrayList<>();
// Getters/Setters/Constructor
@Entity
@Table(name = "comments")
public class Comments {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "comment")
private String comment;
// Getters/Setters/Constructor
@Entity
public class User {
@OneToMany()
public Collection<Comment> comments;
...
}
@Entity
public class Comment {
@ManyToOne
@JoinColumn(name="user_fk")
public User user;
...
}