Duvida de relacionamentos ManyToOne e ManyToMany

Bom dia pessoal, estou com um probleminha aqui. Tentei rodar uma aplicação que eu estou fazendo, porém está dando um erro. E eu acho que seja em um dos relacionamentos.

O erro que da é o seguinte:


javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not load an entity: [entity.Viagem#2]
	at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)
	at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:202)
	at br.gov.ce.srh.siscontv.util.JPAUtil.getEntity(JPAUtil.java:62)
	at br.gov.ce.srh.siscontv.model.DAO.ViagemDAO.buscarViagem(ViagemDAO.java:17)
	at teste.ViagemDAOTeste.testbuscarViagem(ViagemDAOTeste.java:58)
	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 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
	at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.hibernate.exception.SQLGrammarException: could not load an entity: [entity.Viagem#2]
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.loader.Loader.loadEntity(Loader.java:1899)
	at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:71)
	at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:65)
	at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3062)
	at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:434)
	at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:415)
	at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:165)
	at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:223)
	at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:126)
	at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:906)
	at org.hibernate.impl.SessionImpl.get(SessionImpl.java:843)
	at org.hibernate.impl.SessionImpl.get(SessionImpl.java:836)
	at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:182)
	... 27 more
Caused by: org.postgresql.util.PSQLException: ERRO: erro de sintaxe em ou próximo a "["
  Posição: 1616
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:367)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:271)
	at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
	at org.hibernate.loader.Loader.getResultSet(Loader.java:1812)
	at org.hibernate.loader.Loader.doQuery(Loader.java:697)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
	at org.hibernate.loader.Loader.loadEntity(Loader.java:1885)
	... 39 more

s

Eu estou tentando fazer um teste com o JUnitTest.

Aqui está o sql que ele gera para dar o erro acima:


Hibernate: 
    select
        viagem0_.pktbsisc_viagem as pktbsisc1_4_4_,
        viagem0_.dt_periodofinal as dt2_4_4_,
        viagem0_.dt_periodoinicial as dt3_4_4_,
        viagem0_.pktbsisc_cod_estado as pktbsisc15_4_4_,
        viagem0_.in_interno as in4_4_4_,
        viagem0_.ds_cidade as ds5_4_4_,
        viagem0_.ds_pessoa as ds6_4_4_,
        viagem0_.ds_objetivo as ds7_4_4_,
        viagem0_.in_ajudacusto as in8_4_4_,
        viagem0_.in_diaria as in9_4_4_,
        viagem0_.in_passagem as in10_4_4_,
        viagem0_.in_coletiva as in11_4_4_,
        viagem0_.vl_ajudacusto as vl12_4_4_,
        viagem0_.vl_diaria as vl13_4_4_,
        viagem0_.vl_passagens as vl14_4_4_,
        estado1_.pktbsisc_cod_estado as pktbsisc1_3_0_,
        estado1_.ds_estado as ds2_3_0_,
        estado1_.pktbsisc_cod_pais as pktbsisc3_3_0_,
        pais2_.pktbsisc_cod_pais as pktbsisc1_8_1_,
        pais2_.ds_pais as ds2_8_1_,
        solicitaca3_.pktbsisc_solicitacao as pktbsisc1_2_2_,
        solicitaca3_.dt_solicitacao as dt2_2_2_,
        solicitaca3_.ds_justificativa as ds3_2_2_,
        solicitaca3_.in_status as in4_2_2_,
        solicitaca3_.in_relatorioviagem as in5_2_2_,
        solicitaca3_.pktbsisc_usuario as pktbsisc6_2_2_,
        solicitaca3_.pktbsisc_viagem as pktbsisc7_2_2_,
        usuario4_.Ds_Login as Ds1_6_3_,
        usuario4_.NOME as NOME6_3_,
        usuario4_.MATRÍCULA as MATRÍCULA6_3_,
        usuario4_."UNIDADE DE EXERCÍCIO" as UNIDADE4_6_3_,
        usuario4_.tipo_usuario as tipo5_6_3_ 
    from
        teste.tbsisc_viagem viagem0_ 
    left outer join
        teste.tbsisc_estado estado1_ 
            on viagem0_.pktbsisc_cod_estado=estado1_.pktbsisc_cod_estado 
    left outer join
        teste.tbsisc_pais pais2_ 
            on estado1_.pktbsisc_cod_pais=pais2_.pktbsisc_cod_pais 
    left outer join
        teste.tbsisc_solicitacao solicitaca3_ 
            on viagem0_.pktbsisc_viagem=solicitaca3_.pktbsisc_viagem 
    left outer join
        [DADOS DO SERVIDOR] usuario4_ 
            on solicitaca3_.pktbsisc_usuario=usuario4_.Ds_Login 
    where
        viagem0_.pktbsisc_viagem=?

A minha dúvida é,

tenho 2 relacionamentos abaixo, tem algo de errado neles?


class Usuario
	
		@ManyToMany(targetEntity=Grupo.class,mappedBy="listaUsuarios")
		@JoinTable(name="tbsisc_usuario_grupo")
		private List<Grupo> listGrupos;
				
		@OneToMany(mappedBy="usuario")
		private List<Solicitacao> listaSolicitacao = new LinkedList<Solicitacao>();
		

class Solicitacao

	@ManyToOne
	@JoinColumn(name="pktbsisc_usuario")
	private Usuario usuario;


class Grupo

@ManyToMany(targetEntity = Usuario.class)
	@JoinTable(name = "tbsisc_usuario_grupo", joinColumns = @JoinColumn(name = "id_usuario"), inverseJoinColumns = @JoinColumn(name = "id_grupo"))
	private List<Usuario> listaUsuarios = new LinkedList<Usuario>();

	

Alguém poderia me dizer se entre esses relacionamentos, há algum erro de vista ?

oi

não parece ser um erro de relacionamento mas de sintaxe

o que seria o [DADOS DO SERVIDOR] ??

left outer join [DADOS DO SERVIDOR] usuario4_

t+

[DADOS DO SERVIDOR] é uma tabela de um banco. Esqueci de comentar um seguinte problema,

eu estou tentando acessar 2 bancos de dados ao mesmo tempo, pois eu preciso dos dados dos 2. Eu só não entendi pq ele tenta dar um lefjoin no dados do servidor, pois é de outro banco.

A classe Usuario é entidade do banco “BDSERV” que contém a tabela [DADOS DO SERVIDOR] e as demais é de outro banco, “bancoLocal”, que contém as demais tabelas, viagem, grupo, etc …

entendeu ?

Aqui está meu persiste.xml


<persistence-unit name="bancoLocal" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<class>entity.Grupo</class>
		<class>entity.AndamentoSolicitacao</class>
		<class>entity.Solicitacao</class>
		<class>entity.Estado</class>
		<class>entity.Viagem</class>
		
		
		<properties>
			<property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
			<property name="hibernate.connection.username" value="postgres" />
			<property name="hibernate.connection.password" value="1234" />
			<property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/SISCONTV" />
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.format_sql" value="true" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
		</properties>
	</persistence-unit>
	
	<persistence-unit name="BDSERV" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<class>entity.Usuario</class>
		<properties>
			<property name="hibernate.connection.driver_class" value="net.sourceforge.jtds.jdbc.Driver" />
			<property name="hibernate.connection.username" value="User_SICV" />
			<property name="hibernate.connection.password" value="systemsicv" />
			<property name="hibernate.connection.url" value="jdbc:jtds:sqlserver://172.31.128.25/bdserv;" />
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
		</properties>
	</persistence-unit>
	
	<persistence-unit name="BDINTR" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<class>entity.Setor</class>
		<properties>
			<property name="hibernate.connection.driver_class" value="net.sourceforge.jtds.jdbc.Driver" />
			<property name="hibernate.connection.username" value="User_SICV" />
			<property name="hibernate.connection.password" value="systemsicv" />
			<property name="hibernate.connection.url" value="jdbc:jtds:sqlserver://172.31.128.25/bdintr;" />
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
		</properties>
	</persistence-unit>
</persistence>

oi

eu não sei como fazer conexão com mais de um banco usando o persistence.xml

o que eu sei é que você tem que criar dois session factory um para cada banco

dá uma olhada aqui e veja se ajuda

E onde eu coloco isso ?

Configuration cfg1 = new Configuration()
    .setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect")
    .setProperty("hibernate.connection.datasource", "java:comp/env/jdbc/test1")
    .setProperty("hibernate.order_updates", "true")
    .addResource("map1_1.hbm.xml")
    .addResource("map1_2.hbm.xml");
SessionFactory sessions1 = cfg1.buildSessionFactory();
Session session1 = sessions1.openSession();

Configuration cfg2 = new Configuration()
    .setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect")
    .setProperty("hibernate.connection.datasource", "java:comp/env/jdbc/test2")
    .setProperty("hibernate.order_updates", "true")
    .addResource("map2_1.hbm.xml")
    .addResource("map2_2.hbm.xml");
SessionFactory sessions2 = cfg2.buildSessionFactory();
Session session2 = sessions2.openSession();

oi

vc ta usando JPA ou Hibernate? se estiver usando hibernate pode colocar essa configuração no seu HibernateUtil

https://www.hibernate.org/42.html#A11

Estou utilizando JPA

oi, desculpa, acho que falei besteira

como está o mapeamento do seu objeto Viagem?? vc pode postar o código??

t+

Entidade viagem.


@Entity
@Table(name = "teste.tbsisc_viagem")
public class Viagem implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name = "pktbsisc_viagem")
	private Integer idViagem;

	@Column(name = "ds_objetivo")
	private String objetivo;

	@Temporal(TemporalType.DATE)
	@Column(name = "dt_periodoinicial")
	private Date dataInicial;

	@Temporal(TemporalType.DATE)
	@Column(name = "dt_periodofinal")
	private Date dataFinal;

	@Column(name = "ds_cidade")
	private String nomeDaCidade;
	
	@Column(name = "ds_pessoa")
	private String nomePessoa;


	@Column(name="in_interno")
	private boolean inInterno;
	
	// varifica se terá que ser pago passagem

	@Column(name = "in_passagem")
	private boolean validaPassagem;

	// verifica se haverá ajuda de custo

	@Column(name = "in_ajudacusto")
	private boolean validaAjudaDeCusto;

	// verifica se vai ser pago diária

	@Column(name = "in_diaria")
	private boolean validaDiaria;

	
	// verifica se a viagem será coletiva ou não

	@Column(name = "in_coletiva")
	private boolean validaViagemColetiva;

	@Column(name = "vl_ajudacusto")
	private Double valorAjudaDeCusto;

	@Column(name = "vl_diaria")
	private Double valorDaDiaria;

	@Column(name = "vl_passagens")
	private Double valorDaPassagem;

	@ManyToOne
	@JoinColumn(name = "pktbsisc_cod_estado")
	private Estado estado;

	@OneToOne(mappedBy="viagem")
	private Solicitacao solicitacao;
	
	public Viagem() {

	}

	public Integer getIdViagem() {
		return idViagem;
	}

	public void setIdViagem(Integer idViagem) {
		this.idViagem = idViagem;
	}

	public String getObjetivo() {
		return objetivo;
	}

	public void setObjetivo(String objetivo) {
		this.objetivo = objetivo;
	}

	public Date getDataInicial() {
		return dataInicial;
	}

	public void setDataInicial(Date dataInicial) {
		this.dataInicial = dataInicial;
	}

	public Date getDataFinal() {
		return dataFinal;
	}

	public void setDataFinal(Date dataFinal) {
		this.dataFinal = dataFinal;
	}

	public String getNomePessoa() {
		return nomePessoa;
	}

	public void setNomePessoa(String nomePessoa) {
		this.nomePessoa = nomePessoa;
	}

	public boolean isValidaPassagem() {
		return validaPassagem;
	}

	public void setValidaPassagem(boolean validaPassagem) {
		this.validaPassagem = validaPassagem;
	}

	public boolean isValidaAjudaDeCusto() {
		return validaAjudaDeCusto;
	}

	public void setValidaAjudaDeCusto(boolean validaAjudaDeCusto) {
		this.validaAjudaDeCusto = validaAjudaDeCusto;
	}

	public boolean isValidaDiaria() {
		return validaDiaria;
	}

	public void setValidaDiaria(boolean validaDiaria) {
		this.validaDiaria = validaDiaria;
	}

	public boolean isValidaViagemColetiva() {
		return validaViagemColetiva;
	}

	public void setValidaViagemColetiva(boolean validaViagemColetiva) {
		this.validaViagemColetiva = validaViagemColetiva;
	}

	public Double getValorAjudaDeCusto() {
		return valorAjudaDeCusto;
	}

	public void setValorAjudaDeCusto(Double valorAjudaDeCusto) {
		this.valorAjudaDeCusto = valorAjudaDeCusto;
	}

	public Double getValorDaDiaria() {
		return valorDaDiaria;
	}

	public void setValorDaDiaria(Double valorDaDiaria) {
		this.valorDaDiaria = valorDaDiaria;
	}

	public Double getValorDaPassagem() {
		return valorDaPassagem;
	}

	public void setValorDaPassagem(Double valorDaPassagem) {
		this.valorDaPassagem = valorDaPassagem;
	}

	public String getNomeDaCidade() {
		return nomeDaCidade;
	}

	public void setNomeDaCidade(String nomeDaCidade) {
		this.nomeDaCidade = nomeDaCidade;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((idViagem == null) ? 0 : idViagem.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Viagem other = (Viagem) obj;
		if (idViagem == null) {
			if (other.idViagem != null)
				return false;
		} else if (!idViagem.equals(other.idViagem))
			return false;
		return true;
	}

	

	public void setEstado(Estado estado) {
		this.estado = estado;
	}

	public Estado getEstado() {
		return estado;
	}



	public void setInInterno(boolean inInterno) {
		this.inInterno = inInterno;
	}

	public boolean isInInterno() {
		return inInterno;
	}

	public void setSolicitacao(Solicitacao solicitacao) {
		this.solicitacao = solicitacao;
	}

	public Solicitacao getSolicitacao() {
		return solicitacao;
	}

oi

aparentemente o erro acontece porque o persistence.xml não consegue mapear a entidade viagem

você já chegou se a tabela teste.tbsisc_viagem realmente existe no banco de dados?

t+

sobre como acessar mais de um db usando JPA acho que você pode sim ter mais de um persistence unit

veja

http://javathoughts.capesugarbird.com/2009/02/jpa-and-multiple-persistence-units.html

Sim a tabela existe. Consegui ajeitar, porém apareceu outro problema.

eu agora estou tentando pegar uma viagem com id, porém da um problema no sql.

o erro é o seguinte:


javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not load an entity: [entity.Viagem#2]
	at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)
	at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:202)
	at br.gov.ce.srh.siscontv.util.JPAUtil.getEntity(JPAUtil.java:62)
	at br.gov.ce.srh.siscontv.model.DAO.ViagemDAO.buscarViagem(ViagemDAO.java:17)
	at teste.ViagemDAOTeste.testbuscarViagem(ViagemDAOTeste.java:58)
	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 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
	at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.hibernate.exception.SQLGrammarException: could not load an entity: [entity.Viagem#2]
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.loader.Loader.loadEntity(Loader.java:1899)
	at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:71)
	at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:65)
	at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3062)
	at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:434)
	at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:415)
	at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:165)
	at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:223)
	at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:126)
	at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:906)
	at org.hibernate.impl.SessionImpl.get(SessionImpl.java:843)
	at org.hibernate.impl.SessionImpl.get(SessionImpl.java:836)
	at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:182)
	... 27 more
Caused by: org.postgresql.util.PSQLException: ERRO: erro de sintaxe em ou próximo a "["
  Posição: 1616
	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:367)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:271)
	at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
	at org.hibernate.loader.Loader.getResultSet(Loader.java:1812)
	at org.hibernate.loader.Loader.doQuery(Loader.java:697)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
	at org.hibernate.loader.Loader.loadEntity(Loader.java:1885)
	... 39 more


e ele gera o seguinte sql


 select
        viagem0_.pktbsisc_viagem as pktbsisc1_4_4_,
        viagem0_.dt_periodofinal as dt2_4_4_,
        viagem0_.dt_periodoinicial as dt3_4_4_,
        viagem0_.pktbsisc_cod_estado as pktbsisc15_4_4_,
        viagem0_.in_interno as in4_4_4_,
        viagem0_.ds_cidade as ds5_4_4_,
        viagem0_.ds_pessoa as ds6_4_4_,
        viagem0_.ds_objetivo as ds7_4_4_,
        viagem0_.in_ajudacusto as in8_4_4_,
        viagem0_.in_diaria as in9_4_4_,
        viagem0_.in_passagem as in10_4_4_,
        viagem0_.in_coletiva as in11_4_4_,
        viagem0_.vl_ajudacusto as vl12_4_4_,
        viagem0_.vl_diaria as vl13_4_4_,
        viagem0_.vl_passagens as vl14_4_4_,
        estado1_.pktbsisc_cod_estado as pktbsisc1_3_0_,
        estado1_.ds_estado as ds2_3_0_,
        estado1_.pktbsisc_cod_pais as pktbsisc3_3_0_,
        pais2_.pktbsisc_cod_pais as pktbsisc1_8_1_,
        pais2_.ds_pais as ds2_8_1_,
        solicitaca3_.pktbsisc_solicitacao as pktbsisc1_2_2_,
        solicitaca3_.dt_solicitacao as dt2_2_2_,
        solicitaca3_.ds_justificativa as ds3_2_2_,
        solicitaca3_.in_status as in4_2_2_,
        solicitaca3_.in_relatorioviagem as in5_2_2_,
        solicitaca3_.pktbsisc_usuario as pktbsisc6_2_2_,
        solicitaca3_.pktbsisc_viagem as pktbsisc7_2_2_,
        usuario4_.Ds_Login as Ds1_6_3_,
        usuario4_.NOME as NOME6_3_,
        usuario4_.MATRÍCULA as MATRÍCULA6_3_,
        usuario4_."UNIDADE DE EXERCÍCIO" as UNIDADE4_6_3_,
        usuario4_.tipo_usuario as tipo5_6_3_ 
    from
        teste.tbsisc_viagem viagem0_ 
    left outer join
        teste.tbsisc_estado estado1_ 
            on viagem0_.pktbsisc_cod_estado=estado1_.pktbsisc_cod_estado 
    left outer join
        teste.tbsisc_pais pais2_ 
            on estado1_.pktbsisc_cod_pais=pais2_.pktbsisc_cod_pais 
    left outer join
        teste.tbsisc_solicitacao solicitaca3_ 
            on viagem0_.pktbsisc_viagem=solicitaca3_.pktbsisc_viagem 
    left outer join
        [DADOS DO SERVIDOR] usuario4_ 
            on solicitaca3_.pktbsisc_usuario=usuario4_.Ds_Login 
    where
        viagem0_.pktbsisc_viagem=?

o erro que da “[” , é pq ele está tentando acessar uma tabela chamada “[DADOS DO SERVIDOR]” que está em outro servidor, e não no servidor de viagem, então eu pergunto,

como vou fazer um mapemento em que possa acessas 2 bancos em 2 servidores diferentes ?

1 banco “bancolocal” está em localhost , e o outro banco BDSERV, está em " 172.168.0.10".

oi

tenta utilizar o que foi dito pelo Tchelo no outro tópico

http://www.guj.com.br/posts/list/138904.java

t+

Mudei meu persistence para este:


<?xml version="1.0" encoding="UTF-8"?>
<persistence version="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-unit name="bancoLocal" transaction-type="JTA">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<jta-data-source>jdbc/postgres</jta-data-source>
		<class>entity.Grupo</class>
		<class>entity.AndamentoSolicitacao</class>
		<class>entity.Solicitacao</class>
		<class>entity.Estado</class>
		<class>entity.Viagem</class>
		
		
		<properties><!--
			<property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
			<property name="hibernate.connection.username" value="postgres" />
			<property name="hibernate.connection.password" value="1234" />
			<property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/SISCONTV" />
			--><property name="hibernate.show_sql" value="true" />
			<property name="hibernate.format_sql" value="true" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
		</properties>
	</persistence-unit>
	
	<persistence-unit name="BDSERV" transaction-type="JTA">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<jta-data-source>jdbc/bdserv</jta-data-source>
		<class>entity.Usuario</class>
		<properties><!--
			<property name="hibernate.connection.driver_class" value="net.sourceforge.jtds.jdbc.Driver" />
			<property name="hibernate.connection.username" value="User_SICV" />
			<property name="hibernate.connection.password" value="systemsicv" />
			<property name="hibernate.connection.url" value="jdbc:jtds:sqlserver://172.31.128.25/bdserv;" />
			--><property name="hibernate.show_sql" value="true" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
		</properties>
	</persistence-unit>
	
	<persistence-unit name="BDINTR" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<class>entity.Setor</class>
		<properties>
			<property name="hibernate.connection.driver_class" value="net.sourceforge.jtds.jdbc.Driver" />
			<property name="hibernate.connection.username" value="User_SICV" />
			<property name="hibernate.connection.password" value="systemsicv" />
			<property name="hibernate.connection.url" value="jdbc:jtds:sqlserver://172.31.128.25/bdintr;" />
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
		</properties>
	</persistence-unit>
</persistence>

coloquei dentro do meu server.xml


 <Resource name="jdbc/postgres" auth="Container"
          type="javax.sql.DataSource" driverClassName="org.postgresql.Driver"
          url="jdbc:postgresql://localhost:5432/SISCONTV"
          username="postgres" password="1234" maxActive="20" maxIdle="10"
maxWait="-1"/>

     <Resource name="jdbc/bdserv" auth="Container"
          type="javax.sql.DataSource" driverClassName="net.sourceforge.jtds.jdbc.Driver"
          url="jdbc:jtds:sqlserver://172.31.128.25/bdserv"
          username="User_SICV" password="systemsicv" maxActive="20" maxIdle="10"
maxWait="-1"/>

coloquei dentro do meu web.xml


<resource-ref>
 <description>postgreSQL Datasource example</description>
 <res-ref-name>jdbc/postgres</res-ref-name>
 <res-type>javax.sql.DataSource</res-type>
 <res-auth>Container</res-auth>
</resource-ref>

<resource-ref>
 <description>SQLServer Datasource example</description>
 <res-ref-name>jdbc/bdserv</res-ref-name>
 <res-type>javax.sql.DataSource</res-type>
 <res-auth>Container</res-auth>
</resource-ref>

… e deu o seguinte erro:


java.lang.NoClassDefFoundError: entity/Viagem
	at teste.ViagemDAOTeste.testbuscarViagem(ViagemDAOTeste.java:54)
	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 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
	at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.ClassNotFoundException: entity.Viagem
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	... 25 more

… ?

oi

o problema parece estar no mapeamento da entidade viagem, tenta ir batendo passo a passo cada um das anotações - @Column, etc

tipo, comenta, compila e veja se roda

se estiver usando eclipse tenta dar um clean no projeto e build novamente

o que você fez acima está certo

Mas antes deixa eu perguntar, oq foi feito ae ta correto ?

oi

A criação do datasource usando JNDI, o persistence.xml com os dois persistence unit apontando para cada recurso, o mapeamento no web.xml, parece estar tudo okay

Por isso o problema pode estar no mapeamento da classe Viagem como falei

Agora deu o seguinte erro:

javax.persistence.PersistenceException: [PersistenceUnit: bancoLocal] Unable to build EntityManagerFactory
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:677)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)
	at br.gov.ce.srh.siscontv.util.JPAUtil.<init>(JPAUtil.java:20)
	at br.gov.ce.srh.siscontv.util.JPAUtil.getInstance(JPAUtil.java:27)
	at br.gov.ce.srh.siscontv.model.DAO.ViagemDAO.buscarViagem(ViagemDAO.java:17)
	at teste.ViagemDAOTeste.testbuscarViagem(ViagemDAOTeste.java:58)
	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 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
	at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.hibernate.HibernateException: Could not find datasource
	at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:79)
	at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:137)
	at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29)
	at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:89)
	at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2119)
	at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2115)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1339)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
	... 31 more
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
	at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
	at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
	at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
	at javax.naming.InitialContext.lookup(Unknown Source)
	at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:75)
	... 39 more

oi

parece que tem um problema com a configuração do seu server.xml, talvez o usuário, senha, alguma coisa assim, checa esses valores para o bancoLocal

para testar a conexão você pode fazer assim

[code]Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup(“java:comp/env”);
DataSource ds = (DataSource)
envCtx.lookup(“jdbc/EmployeeDB”);

Connection conn = ds.getConnection();
… use this connection to access the database …
conn.close();[/code]

mais informações na documentação do tomcat