[quote=alextr]Quero transferir essa consulta:
public List<Material> consultaMaterialUnidade(String unidade) {
Session session;
if (em.getDelegate() instanceof EntityManagerImpl) {
EntityManagerImpl entityManagerImpl = (EntityManagerImpl) em.getDelegate();
session = entityManagerImpl.getSession();
} else {
session = (Session) em.getDelegate();
}
Criteria crit = session.createCriteria(Material.class);
crit.createAlias("unidade", "u");
crit.add(Restrictions.eq("u.unidade", unidade));
crit.addOrder(Order.desc("dataMaterial"));
crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
return crit.list();
}
para HQL, minha entidade material:
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "material_seq")
@Column(name = "id")
private Long id;
@Column(name = "titulo")
private String titulo;
@Column(name = "loudness")
private String loudness;
@Column(name = "codMaterial")
private String codMaterial;
@Column(name = "ancine")
private String ancine;
@Column(name = "duaracao")
private String duracao;
@Column(name = "clip")
private String clip;
@Column(name = "geradora")
private String geradora;
@Column(name = "dataMaterial", updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date dataMaterial;
@Column(name = "dataVencimento", updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date dataVencimento;
@Column(name = "numeroMidia")
private String numeroMidia;
@Column(name = "statusENG")
private String statusEng;
@Column(name = "statusOPEC")
private String statusOPEC;
@Column(name = "grauDeteoriza")
private String grauDeteoriza;
@Column(name = "incidencia")
private String incidencia;
@Column(name = "gerado")
private Boolean gerado = false;
@Column(name = "geradoRessalva")
private Boolean geradoRessalva;
@Column(name = "recebido")
private Boolean recebido;
@Column(name = "observacaoOpe")
private String observacaoOpe;
@Column(name = "observacaoEng")
private String observacaoEng;
@Column(name = "observacaoCli")
private String observacaoCli;
@Column(name = "observacaoOpeRep")
private String observacaoOpeRep;
@Column(name = "Autorizacao")
private String autorizacao;
@Column(name = "pendencia")
private String pendencia;
@Column(name = "juPendencia")
private Boolean juPendencia = false;
private String observaocaoReprova;
private Boolean confirmaGravacaoProg = false;
private Boolean cancelaGravacaoProg = false;
private String observacaoCancelaGravacaoProg;
private Boolean solicitaGravacao = false;
private String xdcam;
private Boolean mantemMaterialDisco = false;
//@ManyToOne----------------------------------------------------------------
@ManyToOne
@JoinColumn(name = "id_pendencia")
private Usuario usuPendencia;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "id_produtora")
private Produtora produtora;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "id_cliente")
private Cliente cliente;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "id_unidadeorigem")
private Unidade unidade;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "id_midia")
private Midia midia;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "id_OperadorEng")
private Usuario operadorEng;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "id_operador")
private Usuario operador;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "id_discomaterial")
private DiscoMaterial discoMaterial;
//--------------------------------------------------------------------------
//@OneToMany ---------------------------------------------------------------
@OneToMany(mappedBy = "material", fetch = FetchType.LAZY, cascade = CascadeType.ALL, targetEntity = Geracao.class)
private List<Geracao> geracoes;
//--------------------------------------------------------------------------
//@OneToOne-----------------------------------------------------------------
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL, targetEntity = IrregularidadeComercial.class)
private IrregularidadeComercial irregularidadeComercial;
e minha entidade cliente é:
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "cliente_seq")
@Column(name = "id_cliente")
private Long id;
@Column(name = "cliente")
private String cliente;
@Column(name = "telefone")
private String telefone;
@Column(name = "contato")
private String contato;
@OneToMany(mappedBy = "cliente", cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = Material.class)
private List<Material> materials;
e até agora eu estou nesse ponto com minha consulta HQL:
public List<Material> consultaMaterialUnidadeHQL(String unidade) {
Session session;
if (em.getDelegate() instanceof EntityManagerImpl) {
EntityManagerImpl entityManagerImpl = (EntityManagerImpl) em.getDelegate();
session = entityManagerImpl.getSession();
} else {
session = (Session) em.getDelegate();
}
Criteria crit = session.createCriteria(Material.class);
//crit.createAlias("cliente", "cliente");
String sql = "SELECT MATERIAL.TITULO as titulo,CLIENTE.CLIENTE as cliente,MATERIAL.DUARACAO as duracao,MATERIAL.XDCAM as xdcam, \n"
+ "MATERIAL.DATAMATERIAL as dataMaterial,MATERIAL.STATUSOPEC as statusOPEC,MATERIAL.STATUSENG as statusEng, \n"
+ "MATERIAL.confirmaGravacaoProg as confirmaGravacaoProg \n"
+ "FROM MATERIAL \n"
+ "JOIN UNIDADE ON MATERIAL.ID_UNIDADEORIGEM = UNIDADE.ID_UNIDADE \n"
+ "JOIN CLIENTE ON MATERIAL.ID_CLIENTE = CLIENTE.ID_CLIENTE \n"
+ "WHERE UNIDADE.UNIDADE = :unidadeHQL \n"
+ "ORDER BY MATERIAL.DATAMATERIAL DESC";
SQLQuery query = session.createSQLQuery(sql);
query.addScalar("titulo", Hibernate.STRING);
query.addScalar("cliente", Hibernate.STRING);
query.addScalar("duracao", Hibernate.STRING);
query.addScalar("xdcam", Hibernate.STRING);
query.addScalar("dataMaterial", Hibernate.TIMESTAMP);
query.addScalar("statusOPEC", Hibernate.STRING);
query.addScalar("statusEng", Hibernate.STRING);
query.addScalar("confirmaGravacaoProg", Hibernate.INTEGER);
query.setParameter("unidadeHQL", unidade);
query.setResultTransformer(Transformers.aliasToBean(Material.class));
crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
List<Material> resultado = query.list();
return resultado;
}
Alguém poderia me ajudar os erros acima(nos post anteriores) não consigo resolver.
[/quote]
Cara, além do fato que coloquei aqui na resposta anterior, você tem que colocar o as entre " " e o nome tem que ser igual ao atributo da classe…
o erro que aconteceu é que como não colocou entre " " o hibernate vai procurar o getTITULO e não getTitulo…
o restante está ok…
String sql = "SELECT MATERIAL.TITULO as \"titulo\""
+ ", c.CLIENTE as \"cliente\""
+ ", m.DUARACAO as \"duracao\""
+ ", m.XDCAM as \"xdcam\""
+ ", m.DATAMATERIAL as \"dataMaterial\""
+ ", m.STATUSOPEC as \"statusOPEC\""
+ ", m.STATUSENG as \"statusEng\""
+ ", m.confirmaGravacaoProg as \"confirmaGravacaoProg\""
+ " FROM MATERIAL m"
+ " JOIN UNIDADE u ON m.ID_UNIDADEORIGEM = u.ID_UNIDADE"
+ " JOIN CLIENTE c ON m.ID_CLIENTE = c.ID_CLIENTE"
+ " WHERE UNIDADE.UNIDADE = :unidadeHQL"
+ " ORDER BY MATERIAL.DATAMATERIAL DESC";
SQLQuery query = session.createSQLQuery(sql);
query.addScalar("titulo", Hibernate.STRING);
query.addScalar("cliente", Hibernate.STRING);
query.addScalar("duracao", Hibernate.STRING);
query.addScalar("xdcam", Hibernate.STRING);
query.addScalar("dataMaterial", Hibernate.TIMESTAMP);
query.addScalar("statusOPEC", Hibernate.STRING);
query.addScalar("statusEng", Hibernate.STRING);
query.addScalar("confirmaGravacaoProg", Hibernate.INTEGER);
query.setParameter("unidadeHQL", unidade);
query.setResultTransformer(Transformers.aliasToBean(Material.class));