Создать новый объект Entity в Spring Boot - PullRequest
0 голосов
/ 15 октября 2018

Я надеюсь, что кто-то может пролить немного света на мою путаницу с сущностями 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?

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

Это звучит хорошо для меня: вы создаете свою сущность, а затем просите хранилище сохранить ее ... без проблем с Spring.

Вы проверили это?:

http://spring.io/guides/gs/accessing-data-jpa/

веселись

0 голосов
/ 15 апреля 2019

То, что вы делаете, полностью действует весной.В приведенном выше примере я мог бы выяснить, что вы хотите, чтобы ваш объект класса сущности сам сохранял значения.Это абсолютно правильно.Вы должны использовать ключевое слово new, чтобы достичь этого.Если вы все еще не хотите создавать новый объект для вашей сущности, у вас есть еще один вариант сделать это с помощью классов Bean / POJO / VO и сопоставить объект сущности с этими классами.

Но все же я скажу, что все, что высделали это совершенно нормально.

На самом деле объект, который вы создаете, предназначен для хранения значения, а не только потому, что в вашем классе есть какой-то метод, и поэтому вы обязаны создать new Object, чтобы иметь возможность вызывать этот метод (как мыделать в обычном Java-проекте). Весной это обрабатывается аннотацией @Autowired для создания объекта.Простой пример - вы автоматически подключите свои репозитории к своим классам обслуживания.

Надеюсь, это поможет.

0 голосов
/ 15 октября 2018

Весной вы можете автоматически подключать / вводить ваши компоненты, компоненты или услуги.Однако объект не должен быть автоматически подключен, так как эти взаимодействия осуществляются через ваш репозиторий.Ваш репозиторий может быть подключен автоматически.

Когда вы хотите создать новый экземпляр вашей сущности, вам разрешается вызывать new, потому что этим не нужно управлять весной.Вы можете просто использовать автоматическое хранилище, чтобы сохранить его в базе данных.Это также работает наоборот, потому что, очевидно, вам понадобится хранилище с автопроводкой для извлечения вашей сущности.

Так что да, ваш метод правильный.

Надеюсь, это прояснит вас, еслиу вас есть какие-либо вопросы, не стесняйтесь спрашивать:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...