Ola queria saber como gerar o banco de dados atravez das minhas classes,
ja tenho minhas entidades mapeadas, e configurei o persistence.xml assim:
<?xml version="1.0" encoding="UTF-8"?><persistenceversion="1.0"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"><persistence-unitname="conexao"transaction-type="RESOURCE_LOCAL"><provider>org.hibernate.ejb.HibernatePersistence</provider><properties><propertyname="hibernate.archive.autodetection"value="class"/><!-- Conexão com o banco de dados --><propertyname="hibernate.dialect"value="org.hibernate.dialect.PostgreSQLDialect"/><propertyname="hibernate.connection.driver_class"value="org.postgresql.Driver"/><propertyname="hibernate.connection.url"value="jdbc:postgresql://localhost/Sistema_Estoque"/><propertyname="hibernate.connection.user"value="root"/><propertyname="hibernate.connection.password"value="123"/><!-- <property name="hibernate.hbm2ddl.auto" value="create" /> --><propertyname="hibernate.hbm2ddl.auto"value="update"/><!--Configuracoes de Debug--><propertyname="hibernate.show_sql"value="true"/><propertyname="hibernate.format_sql"value="true"/><propertyname="use_sql_comments"value="true"/></properties></persistence-unit></persistence>
Execute a aplicação e depois volte para update, senão toda vez que iniciar a aplicação ele apaga as tabelas e cria novamente.
Obs.: para que as tabelas sejam criadas é preciso executar alguma operação de banco de dados. Só criar o entity manager factory, se estiver usando, já serve. Se tiver dúvidas, consulte aqui:
A
adam_sandler
Como faço?
fiz aqui e da exception com o nome,
Exception in thread “main” javax.persistence.PersistenceException: No Persistence provider for EntityManager named conexao
meu projeto esta no maven, onde coloco o persistence.xml? precisa que criar pasta META-INF
?
e onde?
R
Roselito_Favero_da_S
Não tenho usado o maven, mas, sim - na pasta META-INF.
A
adam_sandler
Ja criei amigo a pasta, e continua lançando essa exceção,
em qual local tem que colocar esse meta-inf no maven?
R
Roselito_Favero_da_S
Não é no maven, é no projeto, mesmo. Você já deve ter uma pasta WEB-INF, crie META-INF no mesmo local.
D
drsmachado
Não.
Projetos web possuem uma pasta META-INF dentro de WebContent.
Esta, em específico, precisa ficar na raiz dos códigos fonte.
No caso do maven, a estrutura dos packages é diferente:
Lembrando que o BD já deve estar criado, o hibernate irá criar as tabelas, não o DB.
A
adam_sandler
Isso seria suficiente para gerar as tabelas?
publicstaticvoidmain(String[]args){// TODO Auto-generated method stubEntityManagerFactoryemf;EntityManagerem;emf=Persistence.createEntityManagerFactory("conexao");em=emf.createEntityManager();}
Mas ao rodar gera essa exception
Exception in thread “main” javax.persistence.PersistenceException: [PersistenceUnit: conexao] Unable to build EntityManagerFactory
R
Roselito_Favero_da_S
Sim, isso já criaria as tabelas.
A
asousaj
adam_sandler:
Exception in thread “main” javax.persistence.PersistenceException: [PersistenceUnit: conexao] Unable to build EntityManagerFactory
Por gentileza favor postar a pilha de erros completa.
A
adam_sandler
Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: conexao] Unable to build EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:889)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
at br.com.projetos.sisCorp.ultil.Mapeamento.main(Mapeamento.java:18)
Caused by: org.hibernate.AnnotationException: @Temporal should only be set on a java.util.Date or java.util.Calendar property: br.com.projetos.sisCorp.model.Cobranca.dataProcesso
at org.hibernate.cfg.annotations.SimpleValueBinder.setType(SimpleValueBinder.java:148)
at org.hibernate.cfg.annotations.PropertyBinder.makePropertyAndValue(PropertyBinder.java:186)
at org.hibernate.cfg.annotations.PropertyBinder.makePropertyValueAndBind(PropertyBinder.java:201)
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:2011)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:765)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:684)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3406)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3360)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1334)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1724)
at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:84)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904)
... 5 more
I
igor_ks
Vc anotou com @Temporal pra algum outro tipo de atributo. Veja se nao importou errado o campo Date, pegando de java.sql.Date
A
asousaj
Agora tá melhor.
A falha está na sua classe Cobranca.
Como já está esclicito no print:
A anotação @Temporal só pode ser usada em java.util.Date porém seu atributo dataProcesso é um Calendar.
Cara tenta aprender a analisar os erros, fica muiiiiito mais facíl de resolver a falha, como pode ver tá explicito alí o que está acontecendo. Logo que pegar a prática você vai ver.
EDIT
Deixei a tela de resposta muito tempo aberta, igor_ks já lhe respondeu.
na classe produtos esta assim, lembrando que em todas as classes, eu criei um @NamedQuery
em produtos criei @NamedQuery(name=“Produto.findAll”, query=“SELECT p FROM Produto p”)
como vi em um livro, nao sei se isso é necessario.
estou meio perdido ainda, por que esta falando que esta duplicado?
A
asousaj
Coloque a plilha de erros completa.
Certeza que não tem outra @NamedQuery com mesmo nome em qualquer outra classe?
O mesmo autor acima citado também lançou um livro. O preço tá bem legal
Sumário do livro
A
adam_sandler
ah entendi, vou tentar
A
adam_sandler
Corrigiu o erro dos relacionamentos, mais surgiu outra exception, pqp:
Exception in thread “main” java.lang.IllegalStateException: No data type for node: org.hibernate.hql.internal.ast.tree.IdentNode
-[IDENT] IdentNode: ‘p’ {originalText=p}
Mostra sua classe mapeamento, pois aconteceu algo na linha 18.
Pelo erro deve ser algo na sua Query JPQL.
Pela mensagem deVe ter faltado o ‘p’ no final … tipo “SELECT p FROM Produto p”.
Confere ai tuas @NamedQuery’s
A
adam_sandler
A classe mapeamento, é apenas o main chamando os entity:
public class Mapeamento {
public static void main(String[] args) {
// TODO Auto-generated method stub
EntityManagerFactory emf;
EntityManager em;
emf = Persistence.createEntityManagerFactory("conexao");
em = emf.createEntityManager();
}
}
e eu mechi em umas named query cujo tinha o p, e o erro mudou para :
Caused by: org.hibernate.HibernateException: Errors in named queries: NotaFiscal.findAll
veja como esta minha query na classe notafiscal:
@NamedQuery(name="NotaFiscal.findAll", query="SELECT nf FROM NotaFIscal nf")
A
asousaj
Repara ali onde marquei em vermelho a letra “I” de Fiscal está maiúscula.
Correto: @NamedQuery(name=“NotaFiscal.findAll”, query=“SELECT nf FROM [color=green]NotaFiscal[/color] nf”)
Qualquer coisa, posta aqui tudo que saiu na console.
A
adam_sandler
sim, esta nas dependencias do maven, certinho
A
asousaj
Posta o log da console aqui.
A
adam_sandler
ja postei so lança isso :
log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
A
asousaj
Qual implementação do JPA está usando? Hibernate?
###EDIT ####
Lembrei que é hibernate, por conta do persistence.xml
Cara falta alguma biblioteca … Qual versão do hibernate tá usando?
Olha abaixo o que sai na minha console ao executar um projetinho de testes.
Cara eu optei por não usar maven por enquanto, depois que tiver expert eu usarei.
Fazendo na “unha” é muito melhor pro aprendizado, que é meu foco.
vamos aguardar alguém que entenda de maven pra ajudar
A
adam_sandler
eu ja instalei hibernate na unha antes e consegui gerar as tabelas normal, mas pelo maven parece q é so isso do hibernate pelo que vi nos tutoriais.
O pior que ninguem ta vendo o topico mano, so nois dois.
J
javaflex
adam_sandler:
eu ja instalei hibernate na unha antes e consegui gerar as tabelas normal, mas pelo maven parece q é so isso do hibernate pelo que vi nos tutoriais.
O pior que ninguem ta vendo o topico mano, so nois dois.
:/
Confesso que eu, e acredito que muitos estão acompanhando o tópico sim, mas só a parte “vital” do problema pois eu por exemplo não uso Maven, pelo menos no momento traria mais trabalho técnico sem necessidade do que soluções que interessam pro cliente.
Veja se a solução dessas questões tem algo que você possa aproveitar:
o nome do bd no postgres, é Sistema_Estoque
açguem pra me da uma luz?
A
asousaj
Não é pq está buscando “sistema_estoque” ao invés de “Sistema_Estoque”?
A
adam_sandler
Olá, ele esta tirando esse nome “sistema_estoque” de algum lugar, mas no persistence.xml esta correto.
Não sei de onde esta vindo .
A
adam_sandler
Ola, resolvi o problema.
é pq dentro do postgree, quando vc cria o BD, tem que criar o tau “esquema”, ai eu criei com o nome q ele tava pegando, e foi.
bom agora sim foi, criou as tabelas relacionadas corretamente (eu acho )
vlw ai cara por tudo, feliz 2014.