winigma
Fevereiro 1, 2013, 7:14pm
#1
Olá galera, tenho o objeto requisicao, em que tenho que fazer a consulta a partir dele, e tenho tbm o cotacao, que faz referencia a requisicao,
sse o objeto requisicao tivesse a a referencia eu faria assim:
hql.append("from Requisicao re");
hql.append("inner join fetch re.cotacao c");
mas não tem, em SQL normal eu faço assim e funciona:
SELECT * FROM REQUISICAO AS re
LEFT JOIN COTACAO AS c ON c.ID_REQUISICAO = re.id
como eu faço isso no hql???
Explica direito que não entendi lhufas.
winigma
Fevereiro 1, 2013, 7:24pm
#3
minha classe Requisicao:
Entity
@Table(name = "REQUISICAO")
public class Requisicao implements Identificavel<Long> {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "NUM_SEQ")
private Integer numSequencia;
@Column(name = "ANO_SEQ")
private Integer anoSequencia;
@Label("lblRequisitante")
@JoinColumn(name = "ID_REQUISICAO", nullable = true)
@ManyToOne(fetch = FetchType.LAZY)
private Usuario requisitante;
//gets e sets
}
minha classe Cotacao:
@Entity
@Table(name = "COTACAO")
public class Cotacao implements Identificavel<Long> {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@Temporal(TemporalType.DATE)
@Column(name = "DT_REQUISICAO")
@Label("lblDataRequisicao")
private Date dataFechamento;
@Label("lblRequisicao")
@JoinColumn(name = "ID_REQUISICAO", nullable = true)
@ManyToOne(fetch = FetchType.LAZY)
private Requisicao requisicao;
//gets e sets
}
A minha consulta HQl parte de requisicao,
eu verifico se ela esta cotada ou nao
Eu faria assim, se Requisicao tivesse o atributo cotacao, mas e cotacao que contem requisicao
em sql normal, funciona:
SELECT * FROM REQUISICAO AS re
LEFT JOIN COTACAO AS c ON c.ID_REQUISICAO = re.id
o que quero saber e como transformar esse sql normal em hql.
winigma
Fevereiro 1, 2013, 7:25pm
#4
minha classe Requisicao:
Entity
@Table(name = "REQUISICAO")
public class Requisicao implements Identificavel<Long> {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "NUM_SEQ")
private Integer numSequencia;
@Column(name = "ANO_SEQ")
private Integer anoSequencia;
@Label("lblRequisitante")
@JoinColumn(name = "ID_REQUISICAO", nullable = true)
@ManyToOne(fetch = FetchType.LAZY)
private Usuario requisitante;
//gets e sets
}
minha classe Cotacao:
@Entity
@Table(name = "COTACAO")
public class Cotacao implements Identificavel<Long> {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@Temporal(TemporalType.DATE)
@Column(name = "DT_REQUISICAO")
@Label("lblDataRequisicao")
private Date dataFechamento;
@Label("lblRequisicao")
@JoinColumn(name = "ID_REQUISICAO", nullable = true)
@ManyToOne(fetch = FetchType.LAZY)
private Requisicao requisicao;
//gets e sets
}
A minha consulta HQl parte de requisicao,
eu verifico se ela esta cotada ou nao
Eu faria assim, se Requisicao tivesse o atributo cotacao, mas e cotacao que contem requisicao
em sql normal, funciona:
SELECT * FROM REQUISICAO AS re
LEFT JOIN COTACAO AS c ON c.ID_REQUISICAO = re.id
o que quero saber e como transformar esse sql normal em hql.
[quote=winigma]Olá galera, tenho o objeto requisicao, em que tenho que fazer a consulta a partir dele, e tenho tbm o cotacao, que faz referencia a requisicao,
sse o objeto requisicao tivesse a a referencia eu faria assim:
hql.append("from Requisicao re");
hql.append("inner join fetch re.cotacao c");
mas não tem, em SQL normal eu faço assim e funciona:
SELECT * FROM REQUISICAO AS re
LEFT JOIN COTACAO AS c ON c.ID_REQUISICAO = re.id
como eu faço isso no hql???[/quote]
No java voce ta colocando INNER, e no seu SQL na mao voce ta colocando LEFT, sao 2 coisas diferentes.
So responde 1 pergunta, o que voce quer trazer nesse sql ? voce quer trazer cotacao a partir de Requisicao ?
winigma
Fevereiro 1, 2013, 8:05pm
#8
ta amigo, foi erro ali, era só pra demonstrar mas tanto faz se e left ou só join…
entendeu
winigma
Fevereiro 1, 2013, 8:07pm
#9
Isso mesmo, quero buscar as cotações que contenha requisicao… no sql normal funciona, o que tem vem o que não tem aparece null…
Mas em hql, que deveria ser mais fácil a mesma técnica não funciona.
[quote=winigma]ta amigo, foi erro ali, era só pra demonstrar mas tanto faz se e left ou só join…
entendeu[/quote]
Entendi nao, mas esquece, e responda minha pergunta, voce quer trazer cotacao a partir de Requisicao ?
winigma
Fevereiro 1, 2013, 8:08pm
#11
vc viu minha consulta em SQL??? quero que aquilo seja feito em hql, compreende? aquilo simplesmente funciona!!!
Tenta assim:
hql.append("SELECT re.cotacao FROM Requisicao re");
winigma
Fevereiro 1, 2013, 8:10pm
#13
Isso não vai funcionar, pq minha entidade requisicao, não contém o atributo cotação, ele não faz referencia…
a entidade cotação que referencia requisicao, vc viu as entidades que postei?
Vi nao, pera la, hehehehe.
winigma
Fevereiro 1, 2013, 8:11pm
#15
Cotação
@Entity
@Table(name = "COTACAO")
public class Cotacao implements Identificavel<Long> {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@Temporal(TemporalType.DATE)
@Column(name = "DT_REQUISICAO")
@Label("lblDataRequisicao")
private Date dataFechamento;
@Label("lblRequisicao")
@JoinColumn(name = "ID_REQUISICAO", nullable = true)
@ManyToOne(fetch = FetchType.LAZY)
private Requisicao requisicao;
//gets e sets
}
requisicao
[code]
Entity
@Table (name = “REQUISICAO”)
public class Requisicao implements Identificavel {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "NUM_SEQ")
private Integer numSequencia;
@Column(name = "ANO_SEQ")
private Integer anoSequencia;
@Label("lblRequisitante")
@JoinColumn(name = "ID_REQUISICAO", nullable = true)
@ManyToOne(fetch = FetchType.LAZY)
private Usuario requisitante;
//gets e sets
} [/code]
Na sua classe cotacao tem um referencia para Requisicao, porque nao faz ao contrario ?
hql.append("FROM Cotacao c where c.requisicao.id = :idRequisicao");
query.setParameter("idRequisicao", idRequisicao);
Ou, trazer todas as cotacoes que TENHAM requisicao, que é o que voce quer.
hql.append("FROM Cotacao c where c.requisicao.id is not null");
Voce pode usar outra coluna de requisicao, a que voce achar mais importante para filtrar os dados.
winigma
Fevereiro 1, 2013, 8:27pm
#19
Bom pq eu sempre terei requisicao, e as vezes cotacao,…
HQL nao tem todos os recursos de do SQL, se dar pra fazer em sql não é pra ser possível ser feito em hql?