Problemas com ECLIPSE + HIBERNATE + POSTGRESQL

5 respostas
P

aew pessoal, estou tendo problemas com hibernate e postgresql..
fiz um treinamento onde usamos o mysql como banco. Porem agora estou tentando usar o PostgreSql para uma aplicação minha.. mas como nao obtive sucesso experimentei pegar o exemplo que fizemos no treinamento (que esta funcionando) e só mudei o banco de dados para Postgresql.. e adivinhem? Não funcionou. Ele inicia e tudo mais, mas não faz nada quando clico no botao de salvar, q era para inserir um aluno no banco.

Sou iniciante ainda.. não sei se precisa de alguma configuração/codigo a mais quando se trata do Postgre..
Qual ajuda seria muito bem vinda e agradecida!

O código:
- Aluno.java

@Entity
@Table(name="aluno", schema="public")
public class Aluno implements Serializable { 


	private static final long serialVersionUID = -7437910344764284313L;
	
	private Integer cdAluno;
	private String nmAluno;
	private Date dtNascimento;
	
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="cd_aluno", unique=true, nullable=false)
	public Integer getCdAluno() {
		
		return cdAluno;
	}
	public void setCdAluno(Integer cdAluno) {
		this.cdAluno = cdAluno;
	}
	
	@Column(name="nm_aluno", length=120)
	public String getNmAluno() {
		return nmAluno;
	}
	public void setNmAluno(String nmAluno) {
		this.nmAluno = nmAluno;
	}
	
	@Temporal(TemporalType.TIMESTAMP) //data e hora
	@Column(name="dt_nascimento")
	public Date getDtNascimento() {
		return dtNascimento;
	}
	public void setDtNascimento(Date dtNascimento) {
		this.dtNascimento = dtNascimento;
	}
	public static long getSerialversionuid() {
		return serialVersionUID;
	}
	
	//****** codigo hashCode() ******/
	
}

Classe abstrata

public abstract class AbstractBean <T> {
	
	@ManagedProperty(value="#{entityManagerBuilder.entityManager}") 
	private EntityManager entityManager;
	
	private List<T> lista;
	private T selecionado;
	
	public abstract String getEntityName();
	public abstract Object getId();
	public abstract T createNewEntity();
	
	public void salvar(){
		getEntityManager().getTransaction().begin();
		
		if(getId() == null){
			getEntityManager().persist(selecionado);
		}
		else{
			getEntityManager().merge(selecionado);
		}
		
		getEntityManager().getTransaction().commit();
		
		selecionado = null;
		refreshList();
	}
	
	public void refreshList(){
		
		lista = getEntityManager().createQuery("from " + getEntityName()).getResultList(); //JBQL - HQL
			
	}
	
	public void excluir(T entity){
		getEntityManager().getTransaction().begin();
		getEntityManager().remove(entity);
		getEntityManager().getTransaction().commit();
		
		selecionado = null;
		refreshList();
	}
	
	
	public List<T> getLista() {
		if(lista == null){
			refreshList();
		}
		return lista;
	}

	public void setLista(List<T> lista) {
		this.lista = lista;
	}

	public T getSelecionado() {
		if(selecionado == null){
			selecionado = createNewEntity();
		}
		return selecionado;
	}

	public void setSelecionado(T selecionado) {
		this.selecionado = selecionado;
	}

	public EntityManager getEntityManager() {
		return entityManager;
	}

	public void setEntityManager(EntityManager entityManager) {
		this.entityManager = entityManager;
	}
		
}

Classe AlunoBean.java

@ManagedBean
@ViewScoped
public class AlunoBean extends AbstractBean<Aluno> {

	@Override
	public String getEntityName() {
		return "Aluno";
	}

	@Override
	public Object getId() {
		return getSelecionado().getCdAluno();
	}

	@Override
	public Aluno createNewEntity() {
		return new Aluno();
	}
	
}

e o meu persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
	<persistence-unit name="EscolaModel" transaction-type="RESOURCE_LOCAL">
		<non-jta-data-source>java:jboss/postgresDS</non-jta-data-source>
		
		<class>br.com.veere.escola.model.Aluno</class>
		

		<properties>
			<property name="hibernate.show_sql" value="true"/>
			<property name="hibernate.format_sql" value="true"/>
		</properties>
	</persistence-unit>
</persistence>

Aluno.xhtml

<body>
	<h:form>
	<p:panel header="Manutenção Alunos" style="width: 350px; text-align: center">
		<h:panelGrid columns="2" style="text-align:right">
			<h:outputLabel value="Código: " for="codigo"/>
			<p:inputText value="#{alunoBean.selecionado.cdAluno}" id="codigo" readonly="true" />
			
			<h:outputLabel value="Nome: " for="nome" />
			<p:inputText value="#{alunoBean.selecionado.nmAluno}" id="nome" />
			
			<h:outputLabel value="Data Nascimento: " for="nascimento" />
			<p:calendar value="#{alunoBean.selecionado.dtNascimento}" id="nascimento" navigator="true" />
			
			<p:commandButton value="Salvar" update="@form" action="#{alunoBean.salvar()}" />
			<p:commandButton value="Atualizar" update="@form" action="#{alunoBean.refreshList()}" />
		
		</h:panelGrid>
	</p:panel>
	
	<p:dataTable value="#{alunoBean.lista}" var="aluno">
		<p:column>
			<p:commandLink action="#{alunoBean.setSelecionado(aluno)}" update="@form" value="Editar" />
			<p:commandLink action="#{alunoBean.excluir(aluno)}" update="@form" value="Excluir" />
			
		</p:column>
		<p:column headerText="Código">
			#{aluno.cdAluno}	
		</p:column>
		<p:column headerText="Nome">
			#{aluno.nmAluno}	
		</p:column>
		<p:column headerText="Data Nascimento">
			<h:outputText value="#{aluno.dtNascimento}">
				<f:convertDateTime locale="pt_BR" type="date"/>
			</h:outputText>
		</p:column>
	</p:dataTable>
	</h:form>
</body>

5 Respostas

A

Faltou colocar a sua conexão com o BD, tu criou o persistence mas não colocou o cfg aqui tb

P

desculpe… aonde isso?

To começando ainda… aonde fica o cfg, ou onde crio??

Obrigadoo pela atenção!!

A

este link vai te ajudar, a única diferença é que você vai alterar o dialeto para postgres

P

blza… vo tentar aqui, depois posto o resultado!!

Obrigado mais uma vez!

P

só uma dúvida… seguindo o exemplo do link

no persistence.xml

<persistence-unit name="lojavirtualDB">
o name tem que ser obrigatoriamente o nome do banco?
e na propriedade dialect…

<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />

para mudar para Postgre, tem algum padrao??
ou posso colocar algo como: value=“org.hibernate.dialect.PostgreSQLDialect”

?

Obrigado!

Criado 1 de maio de 2012
Ultima resposta 2 de mai. de 2012
Respostas 5
Participantes 2