私はSpring Data JPAを学んでおり、そのために私はSimpleスタンドアロンアプリケーションを書いています。 > User.java Spring Data JPAは、基礎となるJPAプロバイダをどのようにピックアップ/識別しますか?
@Entity
@Table(name="USER_DETAILS")
public class User {
@Id
@Column(name="SSNID")
private int ssnID;
@Column(name="FULLNAME")
private String fullName;
@Column(name="CITY")
private String city;
// Getters and Setters omitted
}
リポジトリクラス - - > JPADBAccess.java
@Repository
public interface JPADBAccess extends CrudRepository<User, Integer> {
}
リポジトリを使用する単純なサービスクラス
エンティティ・クラス - :ここでサンプルコードであります - > DBServices.java
@Service
public class DBServices {
@Autowired(required=true)
private JPADBAccess jPADBAccess; // How does this work?? ---->(1)
public void saveUser(User user) {
User queriedUser = null;
jPADBAccess.save(user);
}
}
スプリング構成ファイルは次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<beans ... ">
<context:annotation-config/> <!-- This enables the annotation's actions, else annotations don't do their work. -->
<context:component-scan base-package="com.example.service"/> <!-- This is for component scan -->
<jpa:repositories base-package="com.example.jpa"/> <!-- This enables support for Spring Data JPA. -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true"/>
<property name="generateDdl" value="true"/>
</bean>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:tcp://localhost:9092/~/test"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
のpersistence.xmlは次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="userPersistenceUnit" transaction-type="RESOURCE_LOCAL" >
<class>com.example.model.User</class>
</persistence-unit>
スタンドアロンのクラスは次のようになります。
public class MainApp {
public static void main(String s[]) {
DBServices dBServices = null;
User user = new User();
user.setSsnID(1);
user.setCity("Blr");
user.setFullName("Full name");
ApplicationContext appContext = new ClassPathXmlApplicationContext("spring-config.xml");
dBServices = (DBServices) appContext.getBean("DBServices");
dBServices.saveUser(user);
}
}
今ではすべて正常に動作し、私はJPAプロバイダとしてHibernateを使用しています(単にクラスパスにjarファイルを置く)。
は、私は、次の質問がある:
1)設定ファイルに定義されたBeanが存在しない場合にDBServiceが@AutowireによってJPADBAccessのインスタンスを取得しない方法。
@Autowired(required=true)
private JPADBAccess jPADBAccess; // How does this work?? ---->(1)
2)どのようにコンフィギュレーション・ファイルのいずれかで休止状態の言及がないとき、春データJPAを使用するか、または基礎となるJPAプロバイダーが休止状態であることを推測していますか?
感謝を休止状態この行が表示されます。 #1の質問では、Springが実装をオンザフライで提供することに同意しましたが、@Autowireアノテーションを使用する以外に、他の方法でインジェクトする方法がありますか? – CuriousMind
@CuriousMind Beanを挿入するには、 '@ Autowired'アノテーションを使う方法とXML設定ファイルを使う方法があります。 – Jesper
はい、それは私が持っている混乱です。 Beanの実装はSpringのオンザフライで提供されるので、どのようにしてSpringの設定ファイルに提供することができます。私のコメントが素朴に聞こえる場合は、私が理解していないことが原因である可能性があります。 – CuriousMind