Duvida no hibernate para acessar dados de tabelas de tablespaces diferentes

10 respostas
pimentaft

Olá!
Como faço para configurar no hibernate para acessar tabelas de usuarios diferentes?

Ex: graduacao.aluno (usuario/tabela)
      biblioteca.livro(usuario/tabela)

select * from graduacao.aluno;

select * from biblioteca.livro

10 Respostas

leonardoMachado

Até onde eu saiba, quando vc esta mapeando a classe, vc informa qual schema que ela pertence:

@Entity
@Table(schema="system")
public class Banco {
saviobarr

Se estiver usando JPA pode fazer isso facilmente criando um novo no persistence.xml, apontando para um outro schema.

Sávio Barros

pimentaft

Opa!Obrigado por responderem!
Vou testar e logo digo.
E mais uma dúvida: alem de fazer isso, ao criar uma “sqlquery” eu teria que colocar “graduacao.aluno”???
Vlw!

saviobarr

Uma graduação possui vários alunos? Se sim, ao trazer a graduação o JPQL já te retornará todos os alunos vinculados à ela

pimentaft

graduacao seria o nome da tablespace…

saviobarr

não é obrigatório se vc já estiver usando, já estiver dentro da tablespace…

pimentaft

vlw!
E no caso de fazer um createsqlquery(“select * from graduacao.turma”) funcionou…e no caso de createquery(“from turma”) o schema funciona tbm.

Mto obrigado boas festas!

pimentaft

aff…nao foi bem assim… :oops:

Me deu um erro ao tentar fazer uma query:

org.hibernate.hql.ast.QuerySyntaxException: bloco is not mapped [from bloco where codcampus = :codcampus]
	at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:158)
	at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:87)
	at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:70)
	at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:265)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3056)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2945)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
	at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)
	at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)
	at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
	at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
	at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
	at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
	at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
	at br.unig.scif.dao.BlocoDao.procuraBlocoporCampus(BlocoDao.java:24)
	at br.unig.scif.bean.CampusBean.getListarBlocos(CampusBean.java:88)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
	at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
	at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64)
	at org.apache.el.parser.AstValue.getValue(AstValue.java:114)
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
	at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101)
	at javax.faces.component.UISelectItems.getValue(UISelectItems.java:130)
	at com.sun.faces.renderkit.RenderKitUtils.getSelectItems(RenderKitUtils.java:323)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.getOptionNumber(MenuRenderer.java:675)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:793)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:335)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:833)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:896)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:809)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
	at com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:244)
	at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:175)
	at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
	at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:237)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)

Minha query:

public List procuraBlocoporCampus (Campus campus){
		return this.session.createQuery("from bloco where codcampus = :codcampus")
			.setParameter("codcampus", campus.getCodCampus())
			.list();
	}

minha classe:

@Entity
@Table(name="bloco",schema="scif")
public class Bloco implements Serializable{
	@EmbeddedId
	private BlocoPK id;
		
	@ManyToOne (fetch=FetchType.LAZY)
	@JoinColumn(name="codcampus",insertable=false,updatable=false)
	private Campus campus;
	
	@Column(name="codbloco",insertable=false,updatable=false)
	private String codBloco;
//gets e sets omitidos

E no banco:

SQL> desc graduacao.campus;
 Nome                                                  Nulo?    Tipo
 ----------------------------------------------------- -------- ------------------------------------
 BAIRRO                                                         VARCHAR2(30)
 CEP                                                            VARCHAR2(8)
 CGC                                                            VARCHAR2(14)
 CIDADE                                                         VARCHAR2(30)
 CODCAMPUS                                             NOT NULL VARCHAR2(2)
 ENDR                                                           VARCHAR2(50)
 NOMECAMPUS                                                     VARCHAR2(30)
 TEL                                                            VARCHAR2(14)
 UF                                                             VARCHAR2(2)

SQL> desc scif.bloco;
 Nome                                                  Nulo?    Tipo
 ----------------------------------------------------- -------- ------------------------------------
 CODCAMPUS                                             NOT NULL VARCHAR2(2)
 CODBLOCO                                              NOT NULL VARCHAR2(1)

Vlw!

saviobarr

Vc está usando JPA ou HB Clássico com hibernate.cfg.xml?
Acho que está faltando alternar o schema, já que bloco está em outro schema.

pimentaft

Sim!!!
Estou usando o hibernate.cfg.xml.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                                         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
 <session-factory name="">
  <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
  <property name="hibernate.connection.url">jdbc:oracle:thin:@serveroracle:1521:ORACLE</property>
  <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
  <property name="hibernate.connection.username">user</property>
  <property name="hibernate.connection.password"></property>
     		
  <property name="hibernate.show_sql">true</property>
  <property name="hibernate.format_sql">true</property>
 
  <property name="c3p0.max_size">30</property> 
  <property name="c3p0.max_statements">0</property> 
  <property name="c3p0.min_size">5</property> 
  <property name="c3p0.timeout">1200</property>      
 
  <mapping class="br.unig.scif.modelo.Campus"/>
  <mapping class="br.unig.scif.modelo.Bloco"/>
  <mapping class="br.unig.scif.modelo.Pavimento"/>
  <mapping class="br.unig.scif.modelo.Andar"/>
  <mapping class="br.unig.scif.modelo.Sala"/>
  <mapping class="br.unig.scif.modelo.TipoSala"/>
  <mapping class="br.unig.scif.modelo.Turma"/>
  <mapping class="br.unig.scif.modelo.Aloca"/>
  <mapping class="br.unig.scif.modelo.Cursos"/>
  <mapping class="br.unig.scif.modelo.Matriculado"/>
 </session-factory>
</hibernate-configuration>

Eu estava fazendo meu projeto em um servidor de desenvolvimento, agora eu estou passando para o de produção e nao havia a tablespace “SCIF” e suas tabelas neste servidor, somente a tablespace “GRADUACAO” e suas tabelas. O DBA criou SCIF e as tabelas, criou um usuario e me deu permissão para acessar as devidas tabelas em GRADUACAO e SCIF.

Criado 23 de dezembro de 2008
Ultima resposta 29 de dez. de 2008
Respostas 10
Participantes 3