Hibernate Query Language

14/02/2018

5

Olá pessoa. Sou novo nesse mundo de Spring, Hibernate, HQL, JPA, etc. Por isso me desculpem pela dúvida que poderá parecer um tanto quanto simples.
Tenho as seguintes tabelas, mapeadas dessa maneira:

@Entity
@Table(name = "tb_pessoa")
public class Pessoa {

	@Id
	@Column(name = "id_pessoa")
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;

	@Column(name = "nome_pessoa")
	private String nomePessoa;
}

@Entity
@Table(name = "tb_pessoa_fisica")
public class PessoaFisica {

	@Id
	@Column(name = "id_pessoa_fisica")
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;

	@ManyToOne
	@JoinColumn(name = "id_pessoa")
	private Pessoa pessoa;
}

@Entity
@Table(name = "tb_usuario")
public class Usuario {

	@Id
	@Column(name = "id_usuario")
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;

	@ManyToOne
	@JoinColumn(name = "id_pessoa_fisica")
	private PessoaFisica pessoaFisica;
}

@Entity
@Table(name = "tb_academico")
public class Academico {

	@Id
	@Column(name = "id_academico")
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;

	@ManyToOne
	@JoinColumn(name = "id_pessoa_fisica")
	private PessoaFisica pessoaFisica;
}

Tenho também o seguinte:
@PostMapping
	@RequestMapping("/realizarLogin")
	public List<Usuario[]> realizarLogin(@RequestBody LoginDTO loginDTO) throws ServerException {

		this.validarParametrosEntrada(loginDTO);
		
		List<Usuario[]> usuarioAutenticado = autenticacaoDAO.obterUsuarioPeloLogin(loginDTO);

		if (usuarioAutenticado == null) {
			throw new ServerException(MensagemValidacao.MATRICULA_NAO_ENCONTRADA);
		}

		return usuarioAutenticado;
	}

E agora a dúvida é aqui, na hora de fazer o select.
@Repository
public class AutenticacaoDAOImpl implements AutenticacaoDAO {

	@PersistenceContext
	private EntityManager manager;

	@Override
	public List<Usuario[]> obterUsuarioPeloLogin(LoginDTO loginDTO) {

		String hql = "from Usuario";

		Query query = manager.createQuery(hql);
		List<Usuario[]> listResult = query.getResultList();

		/*for (Usuario[] row : listResult) {
			Usuario usuario = row[0];
		}*/

		return listResult;
	}

}

Não tenho problema com paramêtros mas sim em fazer o JOIN. Por padrão o Hibernate retorna os objetos conforme o mapeamento.
Nesse caso abaixo, um select simples na tabela Usuario ele está me retornando a tabela Pessoa e PessoaFisica, porém não a Academico que contém o id (chave primária) que futuramente seria a matrícula.
Enfim preciso fazer o JOIN entre a PessoaFisica e a Academico.

Agradeço desde já a ajuda.
Leonardo

Leonardo

Responder

Posts

04/03/2018

Phellipe Rodrigues

Boa tarde amigo, neste artigo da DevMedia tem um exemplo falzendo um select relacionando 3 tabelas, de uma lida nele e veja os exemplo, acreditoque se ira tirar sua duvida<br />
https://www.devmedia.com.br/java-persistence-api-jpa-primeiros-passos/30511
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários,
consulte nossa política de privacidade.

Aceitar