我使用了一个在Spring中工作的REST,并试图让它与Spring 2.7.3 java 11一起工作--这段代码在Spring中工作,我可以对api进行CRUD调用,但是在引导过程中使用相同的实体类、db、服务和dao得到以下错误。注释中的路径是正确的,因为文件存在于那里。使用bean执行器,我可以看到没有列出用户实体。
当我调用端点时,java抛出一个非实体错误。
java.lang.IllegalArgumentException: Not an entity: class com.test.user.entity.User.
我看过几个这样的questions,但是没有什么效果
@RestController
@RequestMapping("/users")
public class UserRestController {
@Autowired
private UserService userService;
@GetMapping(value="/get/", consumes = "application/json", produces = "application/json")
public User getName(@RequestBody User user) {
User result = userService.getName(user);
return result;
}
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
private UserDAO userDao;
private JSONObject obj;
@Override
@Transactional
public User getName(User user) {
String email = user.getEmail();
User result = userDao.getUser(email);
if (result != null) {
User response = new User(result.getFirstName(), result.getLastName());
return response;
} else {
throw new UserNotFoundException("User not found " + email);
}
}
@Repository
public class UserDaoImpl implements UserDao{
@PersistenceContext
private EntityManager entityManager;
private Logger logger = Logger.getLogger(getClass().getName());
@Override
public User getUser(String email) {
Session session = entityManager.unwrap(Session.class);
try {
User user = new User();
CriteriaBuilder criteria = session.getCriteriaBuilder();
CriteriaQuery<User> cq = criteria.createQuery(User.class);
Root<User> root = cq.from(User.class);
Predicate predicate = criteria.equal(root.get("email"), email);
Query query = session.createQuery(cq.select(root).where(predicate));
user = (User)query.getSingleResult();
return user;
} catch (Exception e){
logger.error(e);
}
return null;
}
@Repository
public interface UserRepository extends CrudRepository<User, String>{
}
@SpringBootApplication(scanBasePackages = {"com.test.user"})
@EntityScan(basePackages = {"com.test.entity"})
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
@Entity
@Table(name="users")
public class User {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@NotNull
@Pattern(regexp="^(\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[\\s.-]\\d{3}[\\s.-]\\d{4}$", message="Phone number must match the following: xxx-xxx-xxxx.")
@Column(name="phone_number", unique=true)
private String phoneNumber;
@NotEmpty
@Email(message="Email address is not well-formed.")
@Column(name="email", unique=true)
private String email;
@NotNull
@Column(name="first_name")
@NotEmpty(message="First name is required.")
@Pattern(regexp="[A-Za-z]{0,45}", message="First name must contain up tp 45 alphabetic characters.")
private String firstName;
@NotNull
@NotEmpty(message="Last name is required.")
@Pattern(regexp="[A-Za-z]{0,45}", message="Last name must contain up tp 45 alphabetic characters.")
@Column(name="last_name")
private String lastName;
public User() {}
public User(
@NotNull @Pattern(regexp = "^(\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[\\s.-]\\d{3}[\\s.-]\\d{4}$", message = "Phone number must match the following: xxx-xxx-xxxx.") String phoneNumber,
@NotEmpty @Email(message = "Email address is not well-formed.") String email,
@NotNull @NotEmpty(message = "First name is required.") @Pattern(regexp = "[A-Za-z]{0,45}", message = "First name must contain up tp 45 alphabetic characters.") String firstName,
@NotNull @NotEmpty(message = "Last name is required.") @Pattern(regexp = "[A-Za-z]{0,45}", message = "Last name must contain up tp 45 alphabetic characters.") String lastName) {
super();
this.phoneNumber = phoneNumber;
this.email = email;
this.firstName = firstName;
this.lastName = lastName;
}
public User(
@NotNull @NotEmpty(message = "First name is required.") @Pattern(regexp = "[A-Za-z]{0,45}", message = "First name must contain up tp 45 alphabetic characters.") String firstName,
@NotNull @NotEmpty(message = "Last name is required.") @Pattern(regexp = "[A-Za-z]{0,45}", message = "Last name must contain up tp 45 alphabetic characters.") String lastName) {
super();
this.firstName = firstName;
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
@Override
public String toString() {
return "User [id=" + id + ", phoneNumber=" + phoneNumber + ", email=" + email + ", firstName=" + firstName
+ ", lastName=" + lastName + "]";
}
}
发布于 2022-09-03 07:18:49
实体包com.test.user.entity
缺少在@EntityScan(basePackages = {"com.test.entity"})
注释中。修复当前的基本包,或者使用
@EntityScan(basePackages = {"com.test.entity", "com.test.user.entity"})
当实体包驻留在@SpringBootApplication(scanBasePackages = {"com.test.user"})
中时,可以删除实体扫描注释。
https://stackoverflow.com/questions/73589766
复制相似问题