Fórum problema com consulta hql #433870
01/02/2013
0
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???
Wisley Souza
Curtir tópico
+ 0Posts
01/02/2013
Danilo Gomes
hql.append("from Requisicao re");
hql.append("left outer join fetch re.cotacao c");
?
Gostei + 0
01/02/2013
Wisley Souza
Gostei + 0
01/02/2013
Wisley Souza
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
hql.append("from Requisicao re inner join fetch re.cotacao c)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.
Gostei + 0
02/02/2013
Danilo Gomes
Você quer trazer requisições, tenham elas cotações ou não, mas trazer os dados de cotação também, caso tenham, correto?
É apenas uma sugestão, pois não sei o que acontece nesse caso, mas faria sentido em SQL:
hql.append("from Cotacao c");
hql.append("right outer join fetch c.requisicao re");
Daria prioridade à requisição, mesmo partindo de cotação.
Não sei o que o Hibernate faria com os dados de cotacao nulos.
Gostei + 0
02/02/2013
Danilo Gomes
Gostei + 0
04/02/2013
Davi Costa
Resolveria seu problema rapidim.
@OneToMany existe para ser usado mesmo.
abcs
Gostei + 0
04/02/2013
Wisley Souza
Gostei + 0
04/02/2013
Danilo Gomes
Gostei + 0
04/02/2013
Davi Costa
Simplesmente vai só facilitar o desenvolvimento.
Costumo seguir a seguinte regra, não deixar os relacionamentos bidirecionais, até que seja necessário, surgiu necessidade implemento logo.
Mas vc pode questionar será que o JPA não vai deixar a consulta mais pesada? É só usar LAZY.
att Davi
Gostei + 0
04/02/2013
Wisley Souza
Gostei + 0
04/02/2013
Danilo Gomes
Fiquei curioso pra saber o que ocorreria nesse caso.
Gostei + 0
04/02/2013
Danilo Gomes
Gostei + 0
04/02/2013
Wisley Souza
Gostei + 0
04/02/2013
Wisley Souza
Gostei + 0
04/02/2013
Danilo Gomes
Imaginei que ele pudesse retornar uma lista com cotações nulas e uma referência para a requisição.
E as requisições que possuem cotação (ou vice versa) viriam completamente preenchidas.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)