Fórum Usando JPA - com nome de tabelas em maiusculo #4430
07/04/2009
0
Códigos:
CREATE TABLE "agr"."APRCPRD" (
"PRPRD_UF" VARCHAR(2) NOT NULL,
"PRPRD_EMP_GRU" INTEGER NOT NULL,
"PRPRD_TAB_PRC" INTEGER NOT NULL,
"PRPRD_PRAZO" INTEGER NOT NULL,
"PRPRD_QUANT" INTEGER NOT NULL,
"PRPRD_PRECO" NUMERIC(10,2) NOT NULL,
CONSTRAINT "APRCPRD_idx" PRIMARY KEY("PRPRD_UF", "PRPRD_EMP_GRU", "PRPRD_TAB_PRC", "PRPRD_PRAZO", "PRPRD_QUANT"),
CONSTRAINT "APRCPRD_MARCA_fk" FOREIGN KEY ("PRPRD_EMP_GRU", "PRPRD_TAB_PRC")
REFERENCES "public"."UPRODTAB"("PRT_EMP_GRU", "PRT_CODIGO")
ON DELETE NO ACTION
ON UPDATE CASCADE
NOT DEFERRABLE
) WITH OIDS;
O banco que uso é postgres. O esquema ta configurado para padrão, não te preocupe com ESQUEMA
Já coloquei desta forma e funcionou @Table(name = "\"APRCPRD\""), mas o problema é quando uso join em outras tabela, como neste exemplo:
@Table(name = "UESTADO".....
....
@JoinColumn(name = "UF_PAIS", referencedColumnName = "PAI_CODIGO")
@ManyToOne
private Upaises ufPais;
@Table(name = "UPAISES".....
....
@Id
@Basic(optional = false)
@Column(name = "PAI_CODIGO", nullable = false)
private Integer paiCodigo;
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
/*
* <<<<<<<<<<< Classe Mapeamento da Tabela APRCPRD >>>>>>>>>>>>
*
*/
package br.com.erp.jpa;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
*
* @author JoaoRocha
*/
@Entity(name = "PrecoProduto")
@Table(name = "APRCPRD")
public class PrecoProduto implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
PrecoProdutoPK id;
@Column(nullable = false, name = "PRPRD_PRECO")
Double preco;
public PrecoProduto() {
}
public PrecoProduto(PrecoProdutoPK id, Double preco) {
this.id = id;
this.preco = preco;
}
public PrecoProdutoPK getId() {
return id;
}
public void setId(PrecoProdutoPK id) {
this.id = id;
}
public Double getPreco() {
return preco;
}
public void setPreco(Double preco) {
this.preco = preco;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final PrecoProduto other = (PrecoProduto) obj;
if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 7;
hash = 17 * hash + (this.id != null ? this.id.hashCode() : 0);
return hash;
}
}
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
/* <<<<<<<<<<< Classe da chave composta >>>>>>>>>>>>>
package br.com.erp.jpa;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Embeddable;
/**
*
* @author JoaoRocha
*/
@Embeddable()
public class PrecoProdutoPK implements Serializable {
private static final long serialVersionUID = 1L;
@Column(nullable=false,name="PRPRD_UF")
String uf;
@Column(nullable=false,name="PRPRD_EMP_GRU")
Integer emp_gru;
@Column(nullable=false,name="PRPRD_TAB_PRC")
Integer tab_prc;
@Column(nullable=false,name="PRPRD_PRAZO")
Integer prazo;
@Column(nullable=false,name="PRPRD_QUANT")
Integer quant;
public PrecoProdutoPK() {
}
public PrecoProdutoPK(String uf, Integer emp_gru, Integer tab_prc, Integer prazo, Integer quant) {
this.uf = uf;
this.emp_gru = emp_gru;
this.tab_prc = tab_prc;
this.prazo = prazo;
this.quant = quant;
}
public Integer getEmp_gru() {
return emp_gru;
}
public void setEmp_gru(Integer emp_gru) {
this.emp_gru = emp_gru;
}
public Integer getPrazo() {
return prazo;
}
public void setPrazo(Integer prazo) {
this.prazo = prazo;
}
public Integer getQuant() {
return quant;
}
public void setQuant(Integer quant) {
this.quant = quant;
}
public Integer getTab_prc() {
return tab_prc;
}
public void setTab_prc(Integer tab_prc) {
this.tab_prc = tab_prc;
}
public String getUf() {
return uf;
}
public void setUf(String uf) {
this.uf = uf;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final PrecoProdutoPK other = (PrecoProdutoPK) obj;
if (this.uf != other.uf && (this.uf == null || !this.uf.equals(other.uf))) {
return false;
}
if (this.emp_gru != other.emp_gru && (this.emp_gru == null || !this.emp_gru.equals(other.emp_gru))) {
return false;
}
if (this.tab_prc != other.tab_prc && (this.tab_prc == null || !this.tab_prc.equals(other.tab_prc))) {
return false;
}
if (this.prazo != other.prazo && (this.prazo == null || !this.prazo.equals(other.prazo))) {
return false;
}
if (this.quant != other.quant && (this.quant == null || !this.quant.equals(other.quant))) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 3;
hash = 61 * hash + (this.uf != null ? this.uf.hashCode() : 0);
hash = 61 * hash + (this.emp_gru != null ? this.emp_gru.hashCode() : 0);
hash = 61 * hash + (this.tab_prc != null ? this.tab_prc.hashCode() : 0);
hash = 61 * hash + (this.prazo != null ? this.prazo.hashCode() : 0);
hash = 61 * hash + (this.quant != null ? this.quant.hashCode() : 0);
return hash;
}
}
MENSAGEM DE ERRO:
Hibernate: select precoprodu0_.PRPRD_EMP_GRU as PRPRD1_0_0_, precoprodu0_.PRPRD_PRAZO as PRPRD2_0_0_, precoprodu0_.PRPRD_QUANT as PRPRD3_0_0_, precoprodu0_.PRPRD_TAB_PRC as PRPRD4_0_0_, precoprodu0_.PRPRD_UF as PRPRD5_0_0_, precoprodu0_.PRPRD_PRECO as PRPRD6_0_0_ from APRCPRD precoprodu0_ where precoprodu0_.PRPRD_EMP_GRU=? and precoprodu0_.PRPRD_PRAZO=? and precoprodu0_.PRPRD_QUANT=? and precoprodu0_.PRPRD_TAB_PRC=? and precoprodu0_.PRPRD_UF=?
07/04/2009 09:01:53 org.hibernate.util.JDBCExceptionReporter logExceptions
WARNING: SQL Error: 0, SQLState: 42P01
07/04/2009 09:01:53 org.hibernate.util.JDBCExceptionReporter logExceptions
SEVERE: ERRO: relação "aprcprd" não existe <------- Observe
07/04/2009 09:01:53 org.hibernate.event.def.DefaultLoadEventListener onLoad
INFO: Error performing load command
org.hibernate.exception.SQLGrammarException: could not load an entity: [br.com.erp.jpa.PrecoProduto#component[emp_gru,prazo,quant,tab_prc,uf]{uf=RS, quant=98, prazo=6, emp_gru=1, tab_prc=1}]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.loadEntity(Loader.java:1874)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3044)
at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:395)
at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:375)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:139)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:195)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:815)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:808)
at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:182)
at br.com.erp.jpa.PrecoProdutoDAO.consultar(PrecoProdutoDAO.java:34)
at br.com.erp.jpa.PrecoProdutoDAO.main(PrecoProdutoDAO.java:47)
Caused by: org.postgresql.util.PSQLException: ERRO: relação "aprcprd" não existe
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
at org.hibernate.loader.Loader.doQuery(Loader.java:674)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.loadEntity(Loader.java:1860)
Pirahy Alimentos
Curtir tópico
+ 0Posts
07/04/2009
Henrique Weissmann
na realidade, esta configuração vai muito mais pro seu gerenciador de banco de dados do que para o JPA.
No caso, se o banco de dados estiver em um servidor Linux (ou qualquer outro sistema operacional que faça diferença entre maiúsculas e minúsculas), haverá diferença, porque os arquivos do SGBD armazenados só serão identificados desta maneira.
A sequencia do que ocorre é a seguinte: alguém faz uma consulta ao SGBD.
SGBD busca arquivos relacionados fazendo uma chamada ao Sistema Operacional.
Sistema Operacional busca os arquivos.
Se for case sensitive, não os encontrará, caso contrário, não haverá diferença.
Um erro é retornado ao SGBD, que retornará o erro ao usuário.
No caso do Windows, no entanto, o mesmo não ocorre, pois o sistema operacional não faz esta diferenciação.
No caso, eu não sei qual a configuração do PostgreSQL para tal.
Gostei + 0
07/04/2009
Pirahy Alimentos
Gostei + 0
08/04/2009
Pirahy Alimentos
Gostei + 0
08/04/2009
Dyego Carmo
Gostei + 0
08/04/2009
Pirahy Alimentos
Gostei + 0
09/04/2009
Dyego Carmo
Gostei + 0
09/04/2009
Dyego Carmo
Esse problema não é do JPA , é do Hibernate...
veja aqui:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1994
http://opensource.atlassian.com/projects/hibernate/browse/HHH-2942;jsessionid=B9F61B2B7190DE113074C1774BBE8083
Existem pedidos para corrigir este bug... e não tem previsão para tal...
Fiz minhas pesquisas... mas até agora todos respondem a mesma coisa, CASE SENSITIVE em tabelas pelo hibernate no postgres ainda não é permitido.
Espero ter ajudado !
Gostei + 0
13/04/2009
Devmedia
a resposta do consultor sanou sua dúvida? Podemos encerrar o chamado?
Gostei + 0
16/04/2009
Pirahy Alimentos
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)