ERRO: HQL - utilizando between e outro parametro

9 respostas
K

Quando vou utilizar o parametro WHERE m.fk_computador=:pat and m.dataManut BETWEEN :start and :end ele dar o seguinte erro:

HTTP Status 500 - org.hibernate.PropertyAccessException: could not get a field value by reflection getter of pesistence.Computador.patrimonio

mas quando utilizo apenas o intervalo de data WHERE m.dataManut BETWEEN :start and :end ele funciona perfeitamente, gerando a minha lista. segue abaixo o metodo completo.

public List<Manutenir> buscarManutenir (String patrimonio, Date data1, Date data2) {
		Session ses = getSession();
		
		Query qr = ses.createQuery("from Manutenir m WHERE m.fk_computador=:pat and m.dataManut BETWEEN :start and :end" );
		qr.setParameter("start", data1);
		qr.setParameter("end", data2);
		qr.setParameter("pat", patrimonio);

		List<Manutenir> listaManutenir = qr.list();
		return listaManutenir;
	}
a minha duvida é saber se eu estou passando os parametro (fk_computador=:pat and) da forma correta

9 Respostas

Fexx

Dá espaço entre “=” e :pat invés de:

m.fk_computador=:pat

Use:

m.fk_computador= :pat

Testa ai.

Abraços.

Fica com DEUS.

romarcio

fk_computador é um atributa da classe Manutenir? Você o nomeou assim ou é o nome do campo no banco apenas e o atributo tem outro nome?

Não deixe m.fk_computador=:pat sem espaços entre cada caracter, porque vai dar problem, faça assim: m.fk_computador = :pat

K

romarcio:
fk_computador é um atributa da classe Manutenir? Você o nomeou assim ou é o nome do campo no banco apenas e o atributo tem outro nome?

Não deixe m.fk_computador=:pat sem espaços entre cada caracter, porque vai dar problem, faça assim: m.fk_computador = :pat

sim, fk_computador é meu atributo de manutenir e no banco tbm estar como fk_computador.

K

Fexx:
Dá espaço entre “=” e :pat invés de:

m.fk_computador=:pat

Use:

m.fk_computador= :pat

Testa ai.

Abraços.

Fica com DEUS.

Tentei dessa forma antes, continua com o mesmo erro!

romarcio

Você pode postar sua classe Manutenir? Apenas a parte da declaração das variáveis, os métodos não precisa.

K
romarcio:
Você pode postar sua classe Manutenir? Apenas a parte da declaração das variáveis, os métodos não precisa.
@Entity
public class Manutenir implements Serializable {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private Integer idManut;
	@Column
	private Date dataManut;
	private String atividades;
	
	@ManyToOne //Relacionamento Muitos para Um
	@JoinColumn(name="fk_computador", referencedColumnName="patrimonio")
	private Computador fk_computador;
	
	
	@ManyToOne //Relacionamento Muitos para Um
	@JoinColumn(name="fk_tecnico", referencedColumnName="idUsuario")
	private Tecnico fk_tecnico;
romarcio

Ok, o problema é o seguinte:private Computador fk_computador;
Isso não é uma variável que armazena o ID e sim um objeto que armazena muitas coisas. Computador é uma classe, e você precisa acessar o método getId() dessa classe para ter acesso ao Id.
Então m.fk_computador precisa acessar o id, algo tipo m.fk_computador.id
Não sei como você nomeou seu id em computador, mas acho que agora deu para você entender o que precisa fazer.

M

romarcio:
Ok, o problema é o seguinte:private Computador fk_computador;
Isso não é uma variável que armazena o ID e sim um objeto que armazena muitas coisas. Computador é uma classe, e você precisa acessar o método getId() dessa classe para ter acesso ao Id.
Então m.fk_computador precisa acessar o id, algo tipo m.fk_computador.id
Não sei como você nomeou seu id em computador, mas acho que agora deu para você entender o que precisa fazer.

estou no projeto com o Kelvinpinho, obrigado cara …rodou direitinho.

romarcio

:thumbup:
Depois coloca o post como resolvido ok!

Criado 20 de abril de 2013
Ultima resposta 20 de abr. de 2013
Respostas 9
Participantes 4