2011-03-21 11 views
15

मैं वसंत के दस्तावेज पढ़ रहा हूं, लेकिन मुझे कहना होगा कि यह थोड़ा उलझन में है, जेपीए को कॉन्फ़िगर करने के तरीके पर कई अलग-अलग विकल्प प्रदान करते हैं।स्प्रिंग 3 के साथ जेपीए कॉन्फ़िगर कैसे करें?

वसंत 3 के साथ कॉन्फ़िगर किए गए जेपीए 2 (हाइबरनेट के साथ) प्राप्त करने का सबसे अच्छा तरीका क्या है, और कैसे? यदि आपके पास पोम, web.xml, applicationContext.xml, और किसी भी आवश्यक जावा कोड का उदाहरण है, तो क्या आप कृपया इसे भी पोस्ट कर सकते हैं।

धन्यवाद!

उत्तर

1

मैं सुझाव दूंगा कि आप स्प्रिंग रू पर एक नज़र डालें, यह एक स्प्रिंग वेब प्रोजेक्ट बनाता है जिसमें पोम और सभी कॉन्फ़िगरेशन फ़ाइलों की आवश्यकता होती है (उदा। जेपीए)। और यदि आपको रू पसंद नहीं है तो आप इसे छोड़ सकते हैं और प्रोजेक्ट को सामान्य स्प्रिंग वेब एप्लिकेशन के रूप में खतरे में डाल सकते हैं। प्रारंभिक परियोजना सेटअप प्राप्त करने का सबसे तेज़ तरीका IMHO।

+0

समस्या यह है कि मैं JSF उपयोग कर रहा हूँ और नहीं MVC वसंत ... – Emerson

13

मैं एक्लिप्ससेंक का उपयोग करता हूं, लेकिन कॉन्फ़िगरेशन बहुत समान होना चाहिए। यहां आपके पास सबसे महत्वपूर्ण भाग हैं।

pom.xml:

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${org.springframework-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.persistence</groupId> 
     <artifactId>eclipselink</artifactId> 
     <version>2.0.1</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.persistence</groupId> 
     <artifactId>javax.persistence</artifactId> 
     <version>2.0.0</version> 
    </dependency> 

persistence.xml:

<?xml version="1.0" encoding="UTF-8" ?> 
    <persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
    http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
    version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"> 

    <persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL" /> 

</persistence> 

applicationContext-dao.xml:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceXmlLocation" value="classpath:persistence.xml" /> 
    <property name="persistenceUnitName" value="persistenceUnit" /> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="jpaPropertyMap"> 
     <props> 
      <prop key="eclipselink.weaving">false</prop> 
     </props> 
    </property> 
</bean> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory"/> 
</bean> 
<tx:annotation-driven transaction-manager="transactionManager" /> 

User.java:

@Entity 
public class User { 

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE) 
    private Integer id; 

    private String name; 

    // Getters and setters 

} 

UserDao.java:

@Repository 
public class JpaUserDao implements UserDao { 

    @PersistenceContext 
    private EntityManager em; 

    @Override 
    public Item get(Integer id) { 
     return em.find(User.class, id); 
    } 
} 

UserService.java:

@Service 
public class UserServiceImpl implements UserService { 

    @Autowired 
    private UserDao userDao; 

    @Transactional 
    @Override 
    public User getUser(Integer id) { 
     return userDao.get(id); 
    } 

} 

आशा है कि यह मदद करता है।

5

वैकल्पिक रूप से वसंत 3+ और जेपीए 2.0 गतिशील प्रॉक्सी की सहायता से एकीकृत किया जा सकता है।

आप सभी दस्तावेज़ प्राप्त और प्रश्नों पर अमल किया जाता है उदाहरण here

डाउनलोड नामित जेपीए प्रश्नों के साथ इस मामले इंटरफेस में कर सकते हैं। इंटरफेस को गतिशील प्रॉक्सी की मदद से सामान्य वसंत बीन्स के रूप में माना जाता है। उन्हें किसी अन्य बीन्स में इंजेक्शन (या ऑटोवायर) किया जा सकता है।

इसके अलावा प्रश्नों अलग ORM-mapping.xml फाइलों में स्थित हो और डोमेन द्वारा विभाजित (या अपनी सुविधानुसार) जा सकता है। यह लगातार परत के लिए एक उच्च लचीलापन और रखरखाव देता है।

public interface OrganisationQueries { 

     @Query(named = "find.organisation.by.role.id") 
     public Organisation findOrganisationByRoleId(Long roleId); 

     @Query(named = "find.all.organisations") 
     public List<Organisation> findAllOrganisations(); 
    } 
    public class OrganisationServiceImpl implements OrganisationService { 
     @PersistenceContext 
     private EntityManager em; 
     @Autowired 
     private OrganisationQueries organisationQueries; 
     @Override 
     public Organisation findOrganisationByRoleId(Long roleId) { 
      return organisationQueries.findOrganisationByRoleId(roleId); 
     } 
     @Override 
     public List<Organisation> findAllOrganisations() { 
      return organisationQueries.findAllOrganisations(); 
     } 
    } 

    <entity-mappings xmlns="..." version="1.0"> 
     <named-query name="find.organisation.by.role.id"> 
      <query><![CDATA[ 
        select r.organisation from Role r 
        where r.id =?1 
      ]]></query> 
     </named-query> 
     <named-query name="find.all.organisations"> 
      <query><![CDATA[ 
        select org from Organisation org 
        left join fetch org.organisationType 
      ]]></query> 
     </named-query> 
    </entity-mappings> 
+0

मैं उसी तरह उपयोग कर रहा था EntityManager प्राप्त करने के लिए, लेकिन लगता है कि इस तरह से कारण वसंत कई हाइबरनेट सत्र है कि मुक्त नहीं मिलता है बनाने, जो एक स्मृति रिसाव का कारण बनता है। क्या आपने ऐसा कुछ अनुभव किया? अधिक जानकारी मिली [यहां] (http://stackoverflow.com/q/17823599/1211174) – oak

संबंधित मुद्दे