Pessoal, estou com um problema que talvez seja ligado à db.
É o seguinte, minha aplicação usa o Hibernate para fazer o DAO com os bancos. No MySql minha entidade está persistindo corretamente com os annotations feitos de um jeito. Já no Microsoft SQL Server 2005 existe a idéia de schema, o que me obriga a usar a annotation:
@Table(name = "CA1", schema = "erp.dbo")
//onde erp = database, dbo = schema padrão do SQL Server 2005
só que dessa forma a interoperabilidade da aplicação fica comprometida, a menos que eu crie um schema para cada SGBD que for usar a aplicação. Não consegui encontrar nenhuma propriedade (eu uso configuração do hibernate em .properties) que defina um “Schema padrão” para a aplicação. Assim, só consigo persistir os dados usando essa annotation (a persistência está funcionando perfeitamente, acabei de inserir 50000 registros numa base de testes).
Como fugir dessa annotation? Na realidade não queria usar nenhuma espécie de Factory Method para o DAO, uma vez que o Hibernate poderia fazer isso para mim.
Desde já, grato pelas contribuições 
Você pode mover algumas das anotações para o arquivo hbm, se não me engano, justamente para evitar modificar seu código.
Então, eu não estou usando arquivos hbm. Estou usando annotations nas classes
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "CA1", schema = "erp.dbo")
public class CA1 {
@Id
@Column(name = "CA1_USUID", nullable = false, length = 12)
private String CA1_USUID;
@Column(name = "CA1_NOME", nullable = false, length = 45)
private String CA1_NOME;
e, se eu colocasse no hbm, de qlqr forma eu precisaria especificar o schema pra funcionar com o Microsift SQL Server. Mas valew pela ajuda cara.
Alguém tem alguma outra idéia?
vlw
Eu tive um problema parecido.
Precisava das entidades para 2 sistemas diferentes (não-integráveis) e o schema era diferente em cada banco.
Eu cuidei disso no build. O build do sistema A usava a entidade normal e o do sistema B alterava o schema antes de compilar.
Depois que consegui, resolveram deixar tudo um sistema só :lol:
Edit: “Alterava” significa dar um find-and-replace no .java mesmo.
Então, pelo que eu vi por aí na net, esse é um problema comum para quem qr fazer uma aplicação que trabalhe com vários tipos de SGBDs.
Vou dar uma olhada no manual do hibernate e do JTDS (o driver para o Microsoft SQL Server que estou usando) e ver se tem alguma espécie de propertie que eu possa colocar no hibernate.properties dizendo qual será o schema padrão.
Se ajudar, segue meu hibernate.properties:
## set a prefix for cache region names
hibernate.cache.region_prefix hibernate.test
hibernate.cache.provider_class org.hibernate.cache.HashtableCacheProvider
## MySQL
#hibernate.dialect=org.hibernate.dialect.MySQLDialect
#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
#hibernate.connection.driver_class=com.mysql.jdbc.Driver
#hibernate.connection.url=jdbc:mysql://localhost/banco
#hibernate.connection.username=root
#hibernate.connection.password=
## MS SQL Server
hibernate.dialect org.hibernate.dialect.SQLServerDialect
hibernate.connection.driver_class net.sourceforge.jtds.jdbc.Driver
hibernate.connection.url jdbc:jtds:sqlserver://10.0.0.29:1433;erp
hibernate.connection.username sa
hibernate.connection.password sa
Ainda assim, quem tiver outras idéias…
Ahhhhhhh muleque!!! achei!!! :lol:
Pra quem quiser, ou estiver com o mesmo problema que eu…tem uma propriedade no hibernate chamada default_schema:
## set a prefix for cache region names
hibernate.cache.region_prefix hibernate.test
hibernate.cache.provider_class org.hibernate.cache.HashtableCacheProvider
## MySQL
#hibernate.dialect=org.hibernate.dialect.MySQLDialect
#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
#hibernate.connection.driver_class=com.mysql.jdbc.Driver
#hibernate.connection.url=jdbc:mysql://localhost/banco
#hibernate.connection.username=root
#hibernate.connection.password=
## MS SQL Server
hibernate.dialect org.hibernate.dialect.SQLServerDialect
hibernate.connection.driver_class net.sourceforge.jtds.jdbc.Driver
hibernate.connection.url jdbc:jtds:sqlserver://10.0.0.29:1433;phoenixerp
hibernate.connection.username sa
hibernate.connection.password restartfx870
###use essa opção para definir o schema padrão
hibernate.default_schema phoenixerp.dbo
Daí a cada cliente com banco diferente, vc só descomenta as linhas relativas no .properties.
Abraços galera, obrigado a todos que ajudaram
Pessoal,
o meu problema é que eu criei minhas tabelas num outro esquema dentro do meu BD. O exemplo que eu segui cria as tabelas no esquema public e tudo funciona direitinho mas quando eu colouco minha tabela num outro esquema, ao executar não carrega nehum registro. Eu utilizei a sugestão no hibernate.cfg.xml :
BDColetas.Coletas
mas ainda não estou consiguindo carregar os registros. Vocês saberiam me dizer como é que eu posso solucionar este problema.
Grata
eu usei isso em arquivos .properties para o hibernate (hibernate.properties). A cada banco que eu seleciono e que usam schemas diferentes eu fazia a cópia de um arquivo .properties de configuração daquele banco para o hibernate.properties. E a propriedade é aquela msm.
Aparece alguma exception ou só não encontra os registros? lembrando que é mais fácil fazer isso mapeando as tabelas em entidades com o hibernate annotations.
eu usei tb hibernate annotations. E não aparece nehum erro, somente não carrega os registros da tabela, mas se eu colocar no esquema public ae funciona bem. :S
aeeee funcionou aqui
mas eu to usando JPA com PostgreSQL, entao fiz assim
Persistence.xml
...
...
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.default_schema" value="agenda" /> <=== Aqui a solucao pro meu problema!! onde agenda é o schema do Postgre.
</properties>
</persistence-unit>
</persistence>
vou postar o meu erro caso alguem esteja passando por isto e esteja procurando:
org.postgresql.util.PSQLException: ERROR: relation "TABELA(CLASSE)" does not exist
fredferrao e como faria para trabalhar com duas tabelas de schemas diferentes ao mesmo tempo no JPA?