2012-05-14 16 views
5

Zwykle używam hibernacji ze sprężyną w aplikacjach internetowych, więc używam DI i maven do konfiguracji, teraz chcę użyć hibernacji w aplikacji na komputer/huśtawce, która nie używa mavena lub wiosny, i zastanawiałem się, co następuje:Jak skonfigurować hibernację w samodzielnej (Swing) aplikacji w czasie zaćmienia?

  1. Jakie słoiki są potrzebne?
  2. Jak skonfigurować hibernację i jak utworzyć przykładowe zapytanie?

proszę o informacje, dziękuję.

+0

Wystarczy notatkę, że nadal można używać Mavena i wiosny w aplikacji komputerowej. Kontener DI nie jest przewidziany przy użyciu materiałów MVC/sieci. To znacznie ułatwi Ci życie, w przeciwnym razie dodasz tonę płyty kotła, która w inny sposób jest dla ciebie zadbana. – nsfyn55

+0

Próbowałem tego od jakiegoś czasu i myślę, że miałem pewne problemy z autowirowaniem i umieszczeniem wszystkich słoików w jednym słoiku. –

+0

http://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven. Łatwiejsze jest użycie wtyczki maven dependency. – nsfyn55

Odpowiedz

6

nie wiem o Wiosna, więc trzeba będzie uaktualnić moją odpowiedź trochę jeśli naprawdę chcesz go używać (np Wiosna własny mechanizm inicjowania podmiotu zarządzającego).

Zależności

Jest to konfiguracja Kiedyś na ostatnim projekcie stacjonarnym kopalni (niektóre wersje mogą ewoluowały od daty), który używa Hibernacja przez WZP (tj Używa EntityManager):

org.hibernate:hibernate:3.2.7.ga 
org.hibernate:hibernate-annotations:3.4.0.GA 
org.hibernate:hibernate-entitymanager:3.4.0.GA 

Konieczne może być również:

commons-collections:commons-collections:3.2.1 
asm:asm:3.2 
cglib:cglib:2.2 
dom4j:dom4j:1.6.1 
antlr:antlr:2.7.7 
c3p0:c3p0:0.9.1.2 

Możesz znaleźć je wszystkie na maven central.

Konfiguracja

Potrzebny jest ważny persistence.xml w folderze META-INF:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> 

    <persistence-unit name="NONJTAPersistenceUnit" transaction-type="RESOURCE_LOCAL"> 

     <class>com.yourpackage.EntityClass1</class> 
     <class>com.yourpackage.EntityClass2</class> 
     <class>com.yourpackage.EntityClass3</class> 

     <properties> 
      <property name="hibernate.show_sql" value="true"/> 
      <property name="hibernate.format_sql" value="true"/> 
      <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/> 
      <property name="hibernate.connection.url" value="jdbc:hsqldb:hsql://hostXYZ/yourdatabase"/> 
      <property name="hibernate.connection.username" value="sa"/> 
      <property name="hibernate.connection.password" value=""/> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> 
      <property name="hibernate.hbm2ddl.auto" value="update"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

zaktualizować go z własnej bazy danych INFO/kierowcy.

Wykorzystanie

Tworzenie klas podmiotu zwykłą drogę EntityClass1, EntityClass2, EntityClass3 zarejestrowany w pliku persitence.xml powyżej.

Następnie za EntityManager ... ponieważ twój nie są w środowisku EE, trzeba dostać wystąpienie to z EntityManagerFactoty:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("NONJTAPersistenceUnit"); 
EntityManager em = emf.createEntityManager(); 

(Ponownie, wiosna może dostarczyć inny sposób, aby to uzyskać, sprawdź dokumentację).

Stamtąd można wykonać, na przykład operację utrzymują się, w ten sposób:

em.getTransaction().begin(); 
em.persist(entity); 
em.getTransaction().commit(); 

Trzeba trochę dokumentacja czytanie zrobić, aby cały laski sprawa z wiosny.

EDIT

Zapytanie próbki:

Query query = em.createQuery("select e from EntityClass1 where e.name = :name"); 
query.setParameter(:name, "foo"); 
List results = query.getResultList(); 

EDIT

Zaktualizowane wersje:

hibernate-core-3.5.1-Final 
hibernate-entitymanager-3.5.1-Final 
hibernate-jpa-2.0-api-1.0.0.Final 
hibernate-annotations-3.5.1-Final 
hibernate-commons-annotations-3.2.0.Final 
dom4j-1.6.1 
slf4j-api-1.6.4 
slf4j-log4j12-1.6.4 
... 
+0

dziękuję za odpowiedź, a ja nie używam sprężyny tylko podstawowe zastosowanie swing. –

+0

OK, przepraszam, prawdopodobnie błędnie przeczytałem twoje pytanie. Zapomnij o moich uwagach na temat Wiosny w mojej odpowiedzi i daj mi znać, jeśli to, co proponuję, działa dla ciebie. – Yanflea

+0

ok, spróbuję tego, ale dlaczego używasz EntityManager zamiast SessionFactory? i jak utworzyć zapytanie kwerendy za pomocą elementu entityManager? –

1

Nie ma różnicy między aplikacją WebApp a aplikacją StandAlone, która używa Spring/Hibernate do swojej konfiguracji. Powinieneś powtórzyć te same pliki JAR dla hibernacji. Na wiosnę można pozbyć się JARów zorientowanych w sieci, ale w przeciwnym razie wszystkie podstawowe elementy są wymagane.

Umieść pliki JAR w folderze "/ lib" i dodaj je do swojej klasy classpath, określając je w pliku Manifest.mf jako część kompilacji Maven.

Aby bootstrap aplikacji Java na wierszu poleceń po prostu powołać/załadować ApplciationContext zacząć od głównego klasy jak ten ...

public static void main(String[] args) { 
... 

String[] contextXml = new String[]{ "resources/spring-context.xml", "resources/spring-db.xml" }; 

ApplicationContext ctx = new ClassPathXmlApplicationContext(contextXml); 

// invoke your business logic 

MyBusinessService bean = getBean(MyBusinessService.class); 

bean.doSomething(); 
... 
} 

Oto przykład DAO

import org.hibernate.SessionFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.orm.hibernate3.support.HibernateDaoSupport; 
import org.springframework.stereotype.Repository; 

@Repository 
public class MyDaoHibernate extends HibernateDaoSupport { 


    /*** Functional methods ***/ 

    public void save(MyValueObject vo) throws DatabaseException {  
     getHibernateTemplate().saveOrUpdate(vo); 
    } 

    public MyValueObject get(Long id) throws DatabaseException { 
     return getHibernateTemplate().get(MyValueObject.class, id); 
    } 

    /*** Getter & Setters ***/ 

    @Autowired 
    public void initSessionFactory(SessionFactory sessionFactory) { 
     this.setSessionFactory(sessionFactory); 
    } 
} 

[EDIT]

Dobra uwaga podniesiona przez Yanflea, będziesz chciał użyć biblioteki łączenia połączeń z bazą danych, ponieważ nie jest ona dostępna dla Ciebie w aplikacji internetowej. Pobierz commons-dbcp.jar i dodać następujące konfiguracji wiosnę ...

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="com.sybase.jdbc2.jdbc.SybDriver" /> 
    <property name="url"    value="${jdbc.url}" /> 
    <property name="username"   value="${jdbc.username}" /> 
    <property name="password"   value="${jdbc.password}" /> 
</bean> 
+2

ta aplikacja komputerowa nie używa sprężyn ani mavenów. –

+0

Proponuję użyć Spring do swojej aplikacji komputerowej. Jeśli już znasz Spring, nie będziesz musiał dopasowywać stylu kodowania/testowania. Jeśli nie używasz Mavena, nadal będziesz musiał spakować aplikację do pliku JAR, więc w końcu użyjesz Mavena lub ANT, aby to zrobić. – Brad

+1

To prawda. Jeśli jesteś przyzwyczajony do wiosny, używaj go dalej.Fakt, że jesteś na pulpicie, teraz nie przeszkadza. To samo dotyczy Mavena. – Yanflea

0

SessionFactory jest najlepszym sposobem użycia Hibernacja w sposób ny (aplikacja internetowa lub Desktop). Wystarczy pobrać najnowszą wersję pakietu aktualizacji oprogramowania hibernacji z http://sourceforge.net/projects/hibernate/files/hibernate4/. W folderze lib znajduje się wymagany folder. Uwzględnij wszystkie te słoiki, ponieważ wszystkie one są obowiązkowe dla projektu hibernacji. Następnie zdefiniuj klasę, która dostarczy ci instancji singleton SessionFactory. Możesz uzyskać tę instancję za pomocą metody buildSessionFactory() na instancji konfiguracji (Jest to klasa, która może odczytywać i przetwarzać plik konfiguracyjny hibernacji). Będziesz musiał zdefiniować wszystkie swoje połączenia i inne parametry w pliku hibernate.cfg.xml (możesz również użyć dowolnej innej nazwy). Aby uzyskać więcej informacji, po prostu przejdź do http://javabrains.koushik.org/. Tutaj, w sekcji Hibernacja, wystarczy kilka pierwszych samouczków. To jest bardzo ładnie wyjaśnione.

Powiązane problemy