Я надеюсь, что кто-то может пролить немного света на мою путаницу с сущностями JPA в проекте Spring Boot.Я слышал, что никогда не следует называть new
в проекте Spring.Я понимаю, что это позволяет Spring управлять всеми bean-компонентами, и получение bean-компонента может быть выполнено с помощью инъекции или явно через контекст приложения.
Однако мне не ясно, как получить новый JPAСущность.Если у меня есть класс, помеченный @Entity
, и класс репозитория, который обрабатывает мой доступ к данным, как я могу получить новый объект сущности в моем слое обслуживания?
Я включил @EntityScan
в основную часть моего приложениякласс, поэтому я бы предположил, что Spring знает о сущности.Но когда я пытаюсь получить его через ApplicationContext, возникает исключение.Это имеет смысл, потому что я не верю, что аннотированные классы @Entity
являются Spring Beans, и я не думаю, что было бы правильно также аннотировать их с помощью @Component
.Будем весьма благодарны за любые разъяснения.
В настоящее время я использую ключевое слово new
и сам создаю объекты объектов на уровне сервиса.Ниже приведен очень простой пример:
entity / User.java
@Entity
@Table(name = "users")
public class User {
@Id
private Long id;
private String username;
// Getters & Setters ...
}
репозитории / UserRepository.java
@Repository
public interface UserRepository extends CrudRepository<User, Long> {
User findByUsername(String username);
}
services / UserServiceImpl.java
@Service
public class UserServiceImpl implements UserService {
UserRepository userRepository;
@Autowired
public UserServiceImpl(UserRepository userRepository) {
this.userRepository = userRepository;
}
public void createAndSaveUser(String username) {
User user = new User();
user.setUsername(username);
userRepository.save(user);
}
}
И мы можем предположить, что существуют некоторые другие классы контроллеров, которые будут использовать уровень обслуживания.
В этом примере я явно вызываю ключевое слово new
в методе класса обслуживания createAndSaveUser
.Это правильный способ сделать это, или я должен получить прототип bean-компонента из Spring, который отображается на мою сущность JPA?