2015-05-24 41 views
0

我是Spring Data JPA的初學者,它的特性吸引了無需Impl的特性。但是我在簡單的啓動測試中遇到了一些麻煩。 基本上我只是想創建兩個實體,Person和Pet,其中Person可以與Pets有一對多的關係。我想創建幾個人和寵物,並測試它們是否存儲在數據庫中。但問題是,我不知道如何在main()方法中實現這個功能。我查春數據JPA幾個教程,但仍然沒有取得具體進展(原諒我的過失)使用Spring Data進行簡單測試JPA

這裏的類去(干將,setter和進口略):

@Entity 
public class Person implements Serializable { 

    @Basic 
    private String name; 
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private Long id; 
    @Version 
    private int version; 

    @OneToMany(targetEntity = Pet.class) 
    private Collection<Pet> pet; 
} 
@Entity 
public class Pet implements Serializable { 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private Long id; 
    @Basic 
    private String type; 
    @Version 
    private int version; 

    public Pet() { 

    } 
} 

public interface PersonRepository extends CrudRepository<Person,Long>{ 
    Person findByPet(Pet p); 
} 
public class SimpleTest { 


    public static void main(String[] args) throws BeansException { 
     ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); 

     Person tom=(Person)context.getBean("tom"); 

    } 

} 

我根本就沒有知道將存儲到數據庫中的內容以及何時會發生。我在applicationContext.xml中配置了一些bean,並在存儲庫上添加了掃描。

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd 
     http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"> 

    <jpa:repositories base-package="simpletest" /> 
<bean id="dog" class="Pet"> 

</bean> 
<bean id="cat" class="Pet"> 
</bean> 
<bean id="tom" class="Person"> 
    <property name="name"> 
     <value>tom</value> 
    </property> 

    <property name="pet"> 
     <list> 
      <value> 
       <ref bean="dog"/> 
      </value> 
     </list> 
    </property> 
</bean> 
</beans> 

而且我有一個持久性單元指向我的本地德比DB。

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> 
    <persistence-unit name="SimpleTestPU" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <properties> 
     <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/> 
     <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/GEAH"/> 
     <property name="javax.persistence.jdbc.user" value="admin"/> 
     <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/> 
     <property name="javax.persistence.jdbc.password" value="admin"/> 
     <property name="javax.persistence.schema-generation.database.action" value="create"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

我已經花了幾個小時檢查出不同的教程,但他們並不真正符合我的需要(也許僅僅是因爲我的問題太白癡,但我只是在做一個HelloWorld示例)。如果你能告訴我什麼仍然存在,我很欣賞。 我使用Eclipselink進行JPA。 Maven作爲存儲庫管理。

+0

爲什麼這會與通常堅持實體的方式不同?只需獲取存儲庫並調用save ... –

+0

問題是,存儲庫只是一個接口,所以我無法真正創建它的一個實例並使用repository.save(...)。我認爲這是我以前做的主要區別。我發現@EnableJpaRepository可能會提供幫助,但我不知道在哪裏添加它,因爲我沒有這裏的服務類。 – OrlandoL

+0

我強烈建議閱讀spring數據jpa指南以及如何開始。你已經擁有''和'@ EnableJpaRepository'是相同的,但是對於java配置。如剛剛提到的那樣獲取存儲庫並調用保存。 –

回答