Propriedade não encontrada em um Entity

3 respostas
robinsonbsilva

Bom dia, gostaria de uma grande ajuda. Possuo a seguinte Entity abaixo, e quando executo o DAO correspondente, ordenando por um dos atributos associado da erro.

Entity MarcaVeiculo

public class MarcaVeiculo {

	@OneToOne
	@JoinColumn(name = "id_empresa")
	private Empresa empresa = new Empresa();

	@Id
	@Column(name = "id_marca")
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "id_marca")
	private Integer idMarca;

	@Column(name = "descricao")
	private String descricao;
}

Entity ModeloVeiculo

public class ModeloVeiculo {

	@OneToOne
	@JoinColumn(name = "id_empresa")
	private Empresa empresa = new Empresa();
	
	@Id
	@Column(name = "id_modelo")
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "id_modelo")
	private Integer idModelo;

	@OneToOne
	@JoinColumn(name = "id_marca")
	private MarcaVeiculo marcaVeiculo = new MarcaVeiculo();

	@Column(name = "descricao")
	private String descricao;
}

@ManagedBean(name = “modeloVeiculoBean”)

public DataModel<ModeloVeiculo> getModelos() {

		try {
			ModeloVeiculoDAO dao = ModeloVeiculoDAOHibernate.getInstance();
			modeloVeiculos = new ListDataModel<ModeloVeiculo>(dao.list(1, new String[]{"marcaVeiculo.descricao", "descricao"}));
		} catch (DAOException e) {
			JsfUtil.addErrorMessageExcecao(e, e.getMessage());
		}

		return modeloVeiculos;

	}

DAO

public static List<?> list(int idEmpresa, Class<?> klass, String[] orderBy, Criterion... criterion) throws DAOException {

        Session session = null;
        Transaction transaction = null;

        try {

            session = getSessionFactory().openSession();
            transaction = session.beginTransaction();
            Criteria crit = session.createCriteria(klass);

            for (Criterion c : criterion) {
                crit.add(c);
            }

            for( String order: orderBy){
	            if(orderBy != null && !orderBy.equals("")){
	        		crit.addOrder(Order.asc(order));
	            }
            }

            List<?> retorno = crit.list();
            transaction.commit();

            return retorno;
        } catch (HibernateException hbe) {
            if (transaction != null) {
                transaction.rollback();
            }
            throw new DAOException(hbe);
        } finally {
            if (session != null) {
                session.close();
            }
        }
    }

Ele dá um erro, dizendo que a propriedade descricao não foi encontratado na Entity ModeloVeiculo.

Desde já agradeço.

3 Respostas

Vini_Fernandes

Cara, certifique-se que os metodos get/set para a propriedade existam!

t+

robinsonbsilva

Boas, preciso de um help relacionado a esse problema ainda.

MarcaVeiculo

@Entity
@Table(name = "marca_veiculo")
@SequenceGenerator(name = "id_marca", sequenceName = "marca_veiculo_id_marca_seq")
public class MarcaVeiculo {

	@OneToOne
	@JoinColumn(name = "id_empresa")
	private Empresa empresa = new Empresa();

	@Id
	@Column(name = "id_marca")
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "id_marca")
	private Integer idMarca;

	@Column(name = "descricao")
	private String descricao;

	@Column(name = "data_cadastro")
	@Temporal(javax.persistence.TemporalType.DATE)
	private Date dataCadastro = new Date();
	
	@Column(name = "data_exclusao")
	@Temporal(javax.persistence.TemporalType.DATE)
	private Date dataExclusao;

	@Column(name = "excluido")
	private Integer excluido = 0;

	@Column(name = "id_funcionario_exclusao")
	private Integer idFuncionarioExclusao;

	public Empresa getEmpresa() {
		return empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

	public Integer getIdMarca() {
		return idMarca;
	}

	public void setIdMarca(Integer idMarca) {
		this.idMarca = idMarca;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Date getDataCadastro() {
		return dataCadastro;
	}

	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	public Date getDataExclusao() {
		return dataExclusao;
	}

	public void setDataExclusao(Date dataExclusao) {
		this.dataExclusao = dataExclusao;
	}

	public Integer getExcluido() {
		return excluido;
	}

	public void setExcluido(Integer excluido) {
		this.excluido = excluido;
	}

	public Integer getIdFuncionarioExclusao() {
		return idFuncionarioExclusao;
	}

	public void setIdFuncionarioExclusao(Integer idFuncionarioExclusao) {
		this.idFuncionarioExclusao = idFuncionarioExclusao;
	}	

}

ModeloVeiculo

@Entity
@Table(name = "marca_veiculo_modelo")
@SequenceGenerator(name = "id_modelo", sequenceName = "marca_veiculo_modelo_id_modelo_seq")
public class ModeloVeiculo {

	@OneToOne
	@JoinColumn(name = "id_empresa")
	private Empresa empresa = new Empresa();
	
	@Id
	@Column(name = "id_modelo")
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "id_modelo")
	private Integer idModelo;

	@OneToOne
	@JoinColumn(name = "id_marca")
	private MarcaVeiculo marcaVeiculo = new MarcaVeiculo();

	@Column(name = "descricao")
	private String descricao;

	@Column(name = "data_cadastro")
	@Temporal(javax.persistence.TemporalType.DATE)
	private Date dataCadastro = new Date();
	
	@Column(name = "data_exclusao")
	@Temporal(javax.persistence.TemporalType.DATE)
	private Date dataExclusao;

	@Column(name = "excluido")
	private Integer excluido = 0;

	@Column(name = "id_funcionario_exclusao")
	private Integer idFuncionarioExclusao;

	public Empresa getEmpresa() {
		return empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

	public Integer getIdModelo() {
		return idModelo;
	}

	public void setIdModelo(Integer idModelo) {
		this.idModelo = idModelo;
	}

	public MarcaVeiculo getMarcaVeiculo() {
		return marcaVeiculo;
	}

	public void setMarcaVeiculo(MarcaVeiculo marcaVeiculo) {
		this.marcaVeiculo = marcaVeiculo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Date getDataCadastro() {
		return dataCadastro;
	}

	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	public Date getDataExclusao() {
		return dataExclusao;
	}

	public void setDataExclusao(Date dataExclusao) {
		this.dataExclusao = dataExclusao;
	}

	public Integer getExcluido() {
		return excluido;
	}

	public void setExcluido(Integer excluido) {
		this.excluido = excluido;
	}

	public Integer getIdFuncionarioExclusao() {
		return idFuncionarioExclusao;
	}

	public void setIdFuncionarioExclusao(Integer idFuncionarioExclusao) {
		this.idFuncionarioExclusao = idFuncionarioExclusao;
	}	

}

@ManagedBean(name = “modeloVeiculoBean”)

public DataModel<ModeloVeiculo> getModelos() {

		try {
			ModeloVeiculoDAO dao = ModeloVeiculoDAOHibernate.getInstance();
			modeloVeiculos = new ListDataModel<ModeloVeiculo>(dao.list(1, new String[]{"marcaVeiculo.descricao", "descricao"}));
		} catch (DAOException e) {
			JsfUtil.addErrorMessageExcecao(e, e.getMessage());
		}

		return modeloVeiculos;

	}

O erro é esse:

org.hibernate.QueryException: could not resolve property: marcaVeiculo.descricao of: br.com.federal.entity.ModeloVeiculo

O SQL gerado pelo hibernate é esse:

select
        this_.id_modelo as id1_7_5_,
        this_.data_cadastro as data2_7_5_,
        this_.data_exclusao as data3_7_5_,
        this_.descricao as descricao7_5_,
        this_.id_empresa as id7_7_5_,
        this_.excluido as excluido7_5_,
        this_.id_funcionario_exclusao as id6_7_5_,
        this_.id_marca as id8_7_5_,
        empresa2_.id_empresa as id1_4_0_,
        empresa2_.cnpj as cnpj4_0_,
        empresa2_.data_cadastro as data3_4_0_,
        empresa2_.data_exclusao as data4_4_0_,
        empresa2_.id_endereco as id9_4_0_,
        empresa2_.excluido as excluido4_0_,
        empresa2_.id_funcionario_exclusao as id6_4_0_,
        empresa2_.nome_fantasia as nome7_4_0_,
        empresa2_.razao_social as razao8_4_0_,
        endereco3_.id_endereco as id1_5_1_,
        endereco3_.bairro as bairro5_1_,
        endereco3_.cep as cep5_1_,
        endereco3_.cidade as cidade5_1_,
        endereco3_.complemento as compleme5_5_1_,
        endereco3_.data_exclusao as data6_5_1_,
        endereco3_.id_empresa as id11_5_1_,
        endereco3_.estado as estado5_1_,
        endereco3_.excluido as excluido5_1_,
        endereco3_.id_funcionario_exclusao as id9_5_1_,
        endereco3_.logradouro as logradouro5_1_,
        empresa4_.id_empresa as id1_4_2_,
        empresa4_.cnpj as cnpj4_2_,
        empresa4_.data_cadastro as data3_4_2_,
        empresa4_.data_exclusao as data4_4_2_,
        empresa4_.id_endereco as id9_4_2_,
        empresa4_.excluido as excluido4_2_,
        empresa4_.id_funcionario_exclusao as id6_4_2_,
        empresa4_.nome_fantasia as nome7_4_2_,
        empresa4_.razao_social as razao8_4_2_,
        marcaveicu5_.id_marca as id1_6_3_,
        marcaveicu5_.data_cadastro as data2_6_3_,
        marcaveicu5_.data_exclusao as data3_6_3_,
        marcaveicu5_.descricao as descricao6_3_,
        marcaveicu5_.id_empresa as id7_6_3_,
        marcaveicu5_.excluido as excluido6_3_,
        marcaveicu5_.id_funcionario_exclusao as id6_6_3_,
        empresa6_.id_empresa as id1_4_4_,
        empresa6_.cnpj as cnpj4_4_,
        empresa6_.data_cadastro as data3_4_4_,
        empresa6_.data_exclusao as data4_4_4_,
        empresa6_.id_endereco as id9_4_4_,
        empresa6_.excluido as excluido4_4_,
        empresa6_.id_funcionario_exclusao as id6_4_4_,
        empresa6_.nome_fantasia as nome7_4_4_,
        empresa6_.razao_social as razao8_4_4_ 
    from
        marca_veiculo_modelo this_ 
    left outer join
        empresa empresa2_ 
            on this_.id_empresa=empresa2_.id_empresa 
    left outer join
        endereco endereco3_ 
            on empresa2_.id_endereco=endereco3_.id_endereco 
    left outer join
        empresa empresa4_ 
            on endereco3_.id_empresa=empresa4_.id_empresa 
    left outer join
        marca_veiculo marcaveicu5_ 
            on this_.id_marca=marcaveicu5_.id_marca 
    left outer join
        empresa empresa6_ 
            on marcaveicu5_.id_empresa=empresa6_.id_empresa 
    order by
        this_.id_marca asc,
        this_.descricao asc

:?: :?:

Vini_Fernandes

Como sua Entity possui o metodo getDescricao(), resta-nos verificar se esse campo exista na tabela marca_veiculo_modelo. Vá ate o banco de dados e verifique se a coluna existe ou execute a seguinte query

select descricao from marca_veiculo_modelo

t+

Criado 11 de outubro de 2011
Ultima resposta 12 de out. de 2011
Respostas 3
Participantes 2