私は誰かが春ブートプロジェクトでJPAエンティティと私の混乱にいくつかのより多くの光を当てることができ願っています。私は1つが呼び出してはなりませんことを聞いたnew
春のプロジェクトで。私はこの春は、豆のすべてを管理できるようにすることであることを理解し、Beanを取得することは、注射を介して、あるいは明示的にアプリケーション・コンテキストを介して行うことができます。
しかし、それは新しいJPAエンティティを取得する方法を私にははっきりしません。私は、注釈付きクラスがある場合は@Entity
、リポジトリクラスハンドルが私のデータアクセスのことを、どのように私は私のサービス層で新しいエンティティオブジェクトを取得していますか?
私は含まれてきた@EntityScan
私は春が実体を認識していることを前提としていますので、自分のアプリケーションのメインクラスで。しかし、私はApplicationContextのを通してそれを取得しようとすると、例外が発生します。私は信じていないので、これは理にかなって@Entity
注釈付きクラスは春の豆であり、私はまたでそれに注釈を付けることが正しいだろうとは思いません@Component
。任意の明確化をいただければ幸いです。
私は現在使用しているnew
キーワードを、サービス層で自分自身をエンティティ・オブジェクトを作成します。非常に簡単な例は以下の通りです:
エンティティ/ 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);
}
サービス/ 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
。これはそれを行うための正しい方法であるか、私は私のJPAエンティティにマッピングさ春からいくつかのプロトタイプBeanを取得する必要がありますか?
春では、あなたの豆、コンポーネントやサービス注入/ autowireすることができます。これらの相互作用は、あなたのリポジトリを介して行われているのでしかし、実体はautowiredすべきではありません。あなたのリポジトリができ autowiredします。
あなたは、エンティティの新しいインスタンスを作成したい場合は、あなたが許可されているコールにnew
、これは、スプリングによって管理する必要がないため、。あなたは、単にデータベースに保存しautowiredリポジトリを使用することができます。明らかにあなたがあなたのエンティティを取得するためのautowiredリポジトリを必要とするので、これはまた、周りに他の方法で動作します。
そうです、あなたの方法は正しいです。
ご質問はお気軽に持っている場合、私は、これはあなたのためにそれがより明確になります願っています:)