Quantcast
Channel: Programação - GUJ
Viewing all articles
Browse latest Browse all 33093

Mapeamento Hibernate Property Access e Field Access

$
0
0

@trickstival escreveu:

Oi pessoal, estou com um problema com o hibernate. Estou criando uma aplicação no JavaFX, e utilizando o hibernate pra mapear as minhas classes de entidade.

O problema é que o Hibernate não identifica os tipos que eu estou usando na hora de persistir os objetos no banco de dados, já que determinei os tipos como StringProperty e IntegerProperty no lugar de String e Integer. Pra consertar esse erro, coloquei as anotações das propriedades da minha classe nos getters, pra eu poder fazer a conversão dos tipos (StringProperty para String e IntegerProperty pra Integer), ficando assim o mapeamento:

@Entity
@Table(name = "tbArquivo")
public class Arquivo {

	@Transient
	private IntegerProperty idArquivo = new SimpleIntegerProperty();
	@Transient
	private StringProperty nomeArquivo = new SimpleStringProperty();
	@Transient
	private StringProperty localidadeExterna = new SimpleStringProperty();
	@Transient
	private StringProperty generoMusical = new SimpleStringProperty();

	@OneToOne(mappedBy = "arquivo")
	private Artista artista;

	public Arquivo() {

	}

	public Arquivo(String nomeArquivo, String localidadeExterna, String generoMusical) {
		super();
		this.nomeArquivo.set(nomeArquivo);
		this.localidadeExterna.set(localidadeExterna);
		this.generoMusical.set(generoMusical);
	}

	@Override
	public String toString() {
		return "Arquivo [nomeArquivo=" + nomeArquivo + ", localidadeExterna=" + localidadeExterna + ", generoMusical="
				+ generoMusical + "]";
	}

	public IntegerProperty idArquivoProperty() {
		return this.idArquivo;
	}

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	public int getIdArquivo() {
		return this.idArquivoProperty().get();
	}

	public void setIdArquivo(final int idArquivo) {
		this.idArquivoProperty().set(idArquivo);
	}

	public StringProperty nomeArquivoProperty() {
		return this.nomeArquivo;
	}

	@Column(name = "nomeArquivo")
	public String getNomeArquivo() {
		return this.nomeArquivoProperty().get();
	}

	public void setNomeArquivo(final String nomeArquivo) {
		this.nomeArquivoProperty().set(nomeArquivo);
	}

	public StringProperty localidadeExternaProperty() {
		return this.localidadeExterna;
	}

	@Column(name = "localidadeExterna")
	public String getLocalidadeExterna() {
		return this.localidadeExternaProperty().get();
	}

	public void setLocalidadeExterna(final String localidadeExterna) {
		this.localidadeExternaProperty().set(localidadeExterna);
	}

	public StringProperty generoMusicalProperty() {
		return this.generoMusical;
	}

	@Column(name = "generoMusical")
	public String getGeneroMusical() {
		return this.generoMusicalProperty().get();
	}

	public void setGeneroMusical(final String generoMusical) {
		this.generoMusicalProperty().set(generoMusical);
	}

}

Até aí tudo bem, estava conseguindo persistir normalmente para o banco, mas o problema surgiu quando eu precisei criar um Query que retornava uma lista de registros específicos, e precisava acessar os atributos da classe via JPQL.
O método que faz esse acesso é esse:

package pacoteDAO;

import java.util.List;

import javax.persistence.TypedQuery;

import pacote.Artista;





	public List<String> retornaLocalidadesInternas(int idArquivo) {
		TypedQuery<String> tq = EntityManagerUtil.getEntityManager().createQuery(
				"SELECT DISTINCT a.localidadeInterna FROM Artista a JOIN a.arquivo WHERE ar.idArquivo = :id",
				String.class);
		tq.setParameter("id", idArquivo);
		return tq.getResultList();
	}

Quando executei o código, gerou uma Exception com a seguinte mensagem:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Invalid path: 'ar.idArquivo' [SELECT DISTINCT a.localidadeInterna FROM pacote.Artista a JOIN a.arquivo WHERE ar.idArquivo = :id]

No final das contas, minha dúvida é a seguinte: Como eu faço pra acessar o getter da minha classe pela Query do JPA?

Mensagens: 3

Participantes: 2

Ler tópico completo


Viewing all articles
Browse latest Browse all 33093


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>