Jon*_*nio 5 java spring hibernate spring-data-jpa spring-boot
我希望有人能更清楚地了解我在 Spring Boot 项目中对 JPA 实体的困惑。我听说永远不应该调用newSpring 项目。我理解这是为了让 Spring 可以管理所有的 bean,并且可以通过注入或显式地通过应用程序上下文来获取 bean。
但是,我不清楚如何获得新的 JPA 实体。如果我有一个注释的类@Entity和一个处理我的数据访问的存储库类,我如何在我的服务层中获取一个新的实体对象?
我已经包含@EntityScan在我的应用程序的主类中,所以我假设 Spring 知道该实体。但是当我尝试通过 ApplicationContext 获取它时,会引发异常。这是有道理的,因为我不相信带@Entity注释的类是 Spring Bean,而且我认为用@Component. 任何澄清将不胜感激。
我目前正在使用new关键字并在服务层中自己创建实体对象。一个非常简单的例子如下:
@Entity
@Table(name = "users")
public class User {
@Id
private Long id;
private String username;
// Getters & Setters ...
}
Run Code Online (Sandbox Code Playgroud)
@Repository
public interface UserRepository extends CrudRepository<User, Long> {
User findByUsername(String username);
}
Run Code Online (Sandbox Code Playgroud)
@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);
}
}
Run Code Online (Sandbox Code Playgroud)
我们可以假设还有一些其他的控制器类会利用服务层。
在此示例中,我显式调用new了服务类方法中的关键字createAndSaveUser。这是正确的方法还是应该从 Spring 获取一些映射到我的 JPA 实体的原型 bean?
在 spring 中,您可以自动装配/注入 bean、组件或服务。然而,实体不应自动装配,因为这些交互是通过您的存储库完成的。您的存储库可以自动装配。
当您想创建实体的新实例时,您可以调用new,因为这不需要由 spring 管理。您可以简单地使用自动装配的存储库将其保存在数据库中。这也适用于其他方式,因为显然您需要自动装配的存储库来检索您的实体。
所以是的,你的方法是正确的。
我希望这对您来说更清楚,如果您有任何问题,请随时提问:)
| 归档时间: |
|
| 查看次数: |
20550 次 |
| 最近记录: |