Mikhas
Janeiro 22, 2010, 8:27am
#1
Oi Galera!
Gostaria de começar a utilizar o JPA em meus novos projetos mas não sei quase nada sobre o assunto.
Criei um projeto em que vou utilizar o Spring Framwork 3 e gostaria de adicionar e configurar JPA a ele.
Com o maven, adicionei como dependencia o Hibernate 3.4.0 GA.
Gostaria de saber como configuro minha aplicação para utilizar JPA.
Inicialmente vou rodar no tomcat mas pretendo rodar em um application server posteriormente.
Grato
zoren
Janeiro 22, 2010, 9:22am
#2
É só vc criar seus beans e criar um persistence unit, dentro de se eu não me engano, WEB-INF
esse arquivo se chama persistence.xml
dentro dele vai as configurações do provedor de dados
Ai é só vc criar um EntityManagerFactory
zoren
Janeiro 22, 2010, 9:52am
#3
Aqui tem uma configuração parecida com a que eu uso
Essa configuração é do 2.5, eu tbm uso esse, mais deve ser a mesma coisa para o 3.0
zoren
Janeiro 22, 2010, 9:54am
#4
Para usar dpois
é só anotar suas classes com @Repository
criar um set para um EntityManager e anotar esse método com @PersistenceContext
Os métodos para salvar, atualizar…
devem ser anotados com @Transacional
Bom, é assim que eu faço
Explicar tudo passo a passo aqui no fórum é bem complicado.
O ideal é pegar algum livro ou então algum artigo na internet.
O site do Hibernate (que também é um JPA Provider) tem uma documentação muito boa.
Bons estudos
Mikhas
Janeiro 22, 2010, 10:01am
#6
No caso de eu estar utilizando Spring: Eu preciso configurar o persistence.xml?
O meu esta configurado dessa maneira e não funciona.
<persistence xmlns="http://java.sun.com/xml/ns/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_1_0.xsd"
version="1.0">
<persistence-unit name="hibernate" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/DefaultDS</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit>
</persistence>
@Controller
public class JSPRequestHandler {
@RequestMapping("/index.java")
public String index() {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hibernate");
EntityManager em = emf.createEntityManager();
MyEntity myEntity = new MyEntity();
em.persist(myEntity);
return "index.jsp";
}
}
zoren
Janeiro 22, 2010, 10:13am
#7
Qto ao Spring e ao persistence.xml acho que precisa, nunca testei sem
QUe erro dá?
No seu persistence Unit, vc indicou que vai usar transação e no código vc não usou para dar o persist
Mikhas
Janeiro 22, 2010, 11:38am
#8
zoren, você pode me enviar o seu persistence.xml?
Estou tendo o seguinte erro
[color=red]javax.naming.NameNotFoundException: Name DefaultDS is not bound in this Context[/color].
segue minha configuração
spring-config.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean
id="hibernate"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="Access" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop>
</props>
</property>
</bean>
<bean name="Access" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="sun.jdbc.odbc.JdbcOdbcDriver" />
<property name="url" value="jdbc.odbc.Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=tasks.mdb" />
</bean>
</beans>
persistence.xml
<persistence xmlns="http://java.sun.com/xml/ns/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_1_0.xsd"
version="1.0">
<persistence-unit name="hibernate" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>br.mikhas.echecklist.web.MyEntity</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
Sim… estou usando access para testar
zoren
Janeiro 22, 2010, 11:45am
#9
O problema é a declaração do JTA no seu xml
eu uso assim
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/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_1_0.xsd"
version="1.0">
<persistence-unit name="database">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.format_sql" value="false"/>
</properties>
</persistence-unit>
</persistence>
Mikhas
Janeiro 22, 2010, 11:49am
#10
Alterei o transaction-type para JTA mas o erro continua.
O que é o DefaultDS?
zoren
Janeiro 22, 2010, 11:51am
#11
DefaultDS é a configuração do JTA no seu container
zoren
Janeiro 22, 2010, 11:52am
#12
COloca ai o su persistence.xml
Mikhas
Janeiro 22, 2010, 11:53am
#13
Hmm… no meu caso, estou usando o Tomcat. Ele não é um servidor de aplicação, apenas servlet container.
Acabei de ler que quando não estou usando um Aplication Server, devo utilizar o transaction type como “RESOURCE_LOCAL”.
Alterando meu transaction-type para RESOURCE_LOCAL… continuo tendo o erro.
Como eu crio ou configuro esse DefaultDS (que suponho eu que significa “Default Data Source”).
<persistence xmlns="http://java.sun.com/xml/ns/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_1_0.xsd"
version="1.0">
<persistence-unit name="hibernate" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>br.mikhas.echecklist.web.MyEntity</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
zoren
Janeiro 22, 2010, 11:57am
#14
Onde cria eu não faço a menor idéia
zoren
Janeiro 22, 2010, 11:58am
#15
embaixo da declaração do provider, coloca
peppe
Janeiro 22, 2010, 5:26pm
#16
Uma pergunta,
Eu configurei o JPA, mas ainda me resta uma dúvida quando a estrutura do projeto. Coloquei o arquivo persistence.xml no META-INF existente dentro do diretório WebContent mas o EntityManagerFactory parece não encontrar o arquivo, então criei um diretório META-INF dentro da raiz do src e ai ele fucnionou normalmente.
É correto isso ou falta alguma coisa?
Abraços
zoren
Janeiro 23, 2010, 11:31am
#17
[quote=peppe]Uma pergunta,
Eu configurei o JPA, mas ainda me resta uma dúvida quando a estrutura do projeto. Coloquei o arquivo persistence.xml no META-INF existente dentro do diretório WebContent mas o EntityManagerFactory parece não encontrar o arquivo, então criei um diretório META-INF dentro da raiz do src e ai ele fucnionou normalmente.
É correto isso ou falta alguma coisa?
Abraços[/quote]
Não sei te dizer, pois uso NetBeans, comigo ele sempre cria dentro do diretório da web
peppe
Janeiro 23, 2010, 7:36pm
#18
Acredito que esteja correto sim, estava lendo o livro “Dominando Java Server Faces e Facelets Utilizando Spring 2.5 Hibernate e JPA” da Editora Ciência Moderna e na parte de configuração do JPA com Hibernate ele apresenta a criação de um diretório META-INF na raiz do src…
Acredito que esteja, mas se alguém possuir alguma outra diga de como fazer, agradeço!
LPJava
Janeiro 23, 2010, 11:45pm
#19
peppe tem um pequeno lance que descobrir essa semana no eclipse, qdo eu crio um folder dentro de src META-INF por exemplo e coloco meu persistence la, e tento rodar minha app, simplesmente nao funciona… Ai eu fui deletei a pasta e criei o diretorio fora do eclipse e depois dei um refresh e dai passou a reconhecer meu arquivo de persistencia. meio que estranho mas funcionou.
Outra solucao eh instalar o jboss tool eh uma ferramenta excelente para JSF, Struts, JPA. tem a opcao de criar um projeto JPA com toda configuracao ja pronta. No post abaixo tem como instalar e configurar a ferramenta no eclipse.
http://blog.camilolopes.com.br/?p=1177
abracos