我是Spring启动的新手。我尝试使用Spring Security和Hibernate实现登录和注册功能。
首先,我使用Hibernate从数据库生成持久性映射实体类。我需要在UserEntity类中实现UserDetails接口,但问题发生了。
我无法在UserDetails中实现这些方法。
尝试实现GetAuthories时出错。以下是错误信息。
“Basic”属性类型不应是容器。检查信息:此检查检查是否存在以下JPA规范错误:
对于基于属性的访问,应该同时存在setter和getter检查信息:此检查检查以下JPA规范错误:
这是我的密码。
package com.example.demo;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
@Entity
@Table(name = "user", schema = "demo", catalog = "")
public class UserEntity implements UserDetails {
private String username;
private String password;
private String role;
private String nickname;
private String phone;
@Override
public Collection<? extends GrantedAuthority> getAuthorities(){
String[] authorities=role.split(",");
List<SimpleGrantedAuthority> authorityList=new ArrayList<>();
for(String string:authorities)
authorityList.add(new SimpleGrantedAuthority(string));
return authorityList;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
@Id
@Column(name = "username", nullable = false, length = 16)
@Override
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Basic
@Column(name = "password", nullable = true, length = 32)
@Override
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Basic
@Column(name = "nickname", nullable = true, length = 32)
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
@Basic
@Column(name = "phone", nullable = true, length = 11)
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
UserEntity that = (UserEntity) o;
return Objects.equals(username, that.username) &&
Objects.equals(password, that.password) &&
Objects.equals(nickname, that.nickname) &&
Objects.equals(phone, that.phone);
}
@Override
public int hashCode() {
return Objects.hash(username, password, nickname, phone);
}
}
我创建了一个与UserEntity完全相同的类,实现了UserDetails,问题消失了。也许这有点愚蠢,但我已经试过很多次了。我解决不了。请帮忙。
在JPA中,当一个对象引用另一个对象或对象组时,应指定两者之间的关系。例如:
@Entity
class Parent {
// you should tell the JPA how to treat this collection
Set<Child> children
}
正如@Zon所述,您可以跳过保存它(@Transient)或将子项另存为另一个实体,并定义两者之间的关系(@oneToMany)或您忽略它(@Transient)或将其以二进制格式保存为blob(@Lob)。
请尝试使用OneToMany或Transient注释,而不是Basic注释。
我不明白为什么我必须对类中的私有属性使用getter或setter。
我在我的项目中使用Spring数据JPA。当实体被保存或更新时,我想跟踪CreatedBy和LastModifiedBy,以了解哪个用户执行该活动。但我面临的问题是,我有两种不同类型的用户。这些是系统用户和加油机。这两种用户类型都有权在任何实体中执行CRUD操作。 另一件事是,我见过大多数示例将和作为字符串字段保存。但问题是从数据库中检索数据时,他们将检索为用户ID(字符串值)。我需要将用户ID存
有两种类型的对象属性。 第一种是 数据属性。我们已经知道如何使用它们了。到目前为止,我们使用过的所有属性都是数据属性。 第二种类型的属性是新东西。它是 访问器属性(accessor properties)。它们本质上是用于获取和设置值的函数,但从外部代码来看就像常规属性。 Getter 和 setter 访问器属性由 “getter” 和 “setter” 方法表示。在对象字面量中,它们用 get
问题内容: 我正在制作一个使用Drools规划器的应用程序。 该假设指代属性从另一个类(在这种情况下)。从JavaDocs中获取@ValueRangeFromSolutionProperty: 但我注意到一个 矛盾 :在注释使用属性的。但是(与相对)是一个私有变量(请参见下面的代码段)。如果应该 通过自省 (通过它的getter和setter方法) 推断属性, 则是否应将其拼写为? 问题: Jav
问题内容: 如何给定的属性的值? 问题答案: 有称为和的内置函数 在这种情况下
如何使类示例推断类型基于实例值检查: 打字沙盒。