Cara, vlw, consegui resolver esse problema. Porém, agora tenho outro…
Eu tenho os seguintes Beans
package erpvictory.beans.comum;
/**
* Tela generated by hbm2java
*/
@Entity
@Table(name = "tela", schema = "public")
public class Tela implements java.io.Serializable {
private int codTela;
private Sistema sistema;
private Tela tela;
//private int codSistema;
private String nome;
private Boolean ativo;
private Boolean manutencao;
private Integer ordem;
private Arquivo arquivo;
private List<Tela> telas = new ArrayList<Tela>();
private List<Acao> acaos = new ArrayList<Acao>();
public Tela() {
}
public Tela(int codTela) {
this.codTela = codTela;
}
public Tela(int codTela, Sistema sistema, Tela tela, String nome,
Boolean ativo, Boolean manutencao, Integer ordem, List<Tela> telas,
List<Acao> acaos) {
this.codTela = codTela;
this.sistema = sistema;
this.tela = tela;
this.nome = nome;
this.ativo = ativo;
this.manutencao = manutencao;
this.ordem = ordem;
this.telas = telas;
this.acaos = acaos;
}
@Id
@Column(name = "cod_tela", unique = true, nullable = false)
public int getCodTela() {
return this.codTela;
}
public void setCodTela(int codTela) {
this.codTela = codTela;
}
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "cod_sistema")
public Sistema getSistema() {
return this.sistema;
}
public void setSistema(Sistema sistema) {
this.sistema = sistema;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "cod_arquivo")
public Arquivo getArquivo() {
return this.arquivo;
}
public void setArquivo(Arquivo arquivo) {
this.arquivo = arquivo;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "cod_tela_pai")
public Tela getTela() {
return this.tela;
}
public void setTela(Tela tela) {
this.tela = tela;
}
@Column(name = "nome")
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Column(name = "ativo")
public Boolean getAtivo() {
return this.ativo;
}
public void setAtivo(Boolean ativo) {
this.ativo = ativo;
}
@Column(name = "manutencao")
public Boolean getManutencao() {
return this.manutencao;
}
public void setManutencao(Boolean manutencao) {
this.manutencao = manutencao;
}
@Column(name = "ordem")
public Integer getOrdem() {
return this.ordem;
}
public void setOrdem(Integer ordem) {
this.ordem = ordem;
}
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "tela")
public List<Tela> getTelas() {
return this.telas;
}
public void setTelas(List<Tela> telas) {
this.telas = telas;
}
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "tela")
public List<Acao> getAcaos() {
return this.acaos;
}
public void setAcaos(List<Acao> acaos) {
this.acaos = acaos;
}
/*@Column(name = "cod_sistema", insertable=false, updatable=false)
public int getcodSistema() {
return this.codSistema;
}
public void setcodSistema(int cod_sistema) {
this.codSistema = cod_sistema;
}*/
}
package erpvictory.beans.comum;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@SuppressWarnings("serial")
@Entity
@Table(name = "acao", schema = "public")
public class Acao implements java.io.Serializable {
private int codAcao;
private AcaoTipo acaoTipo;
private Tela tela;
private String nome;
private String acao;
private String javascript;
private Boolean padrao;
private Boolean ativo;
private Set<Usuario> usuarios = new HashSet<Usuario>(0);
private Set<Perfil> perfils = new HashSet<Perfil>(0);
public Acao() {
}
public Acao(int codAcao) {
this.codAcao = codAcao;
}
public Acao(int codAcao, AcaoTipo acaoTipo, Tela tela, String nome,
String acao, String javascript, Boolean padrao, Boolean ativo,
Set<Usuario> usuarios, Set<Perfil> perfils) {
this.codAcao = codAcao;
this.acaoTipo = acaoTipo;
this.tela = tela;
this.nome = nome;
this.acao = acao;
this.javascript = javascript;
this.padrao = padrao;
this.ativo = ativo;
this.usuarios = usuarios;
this.perfils = perfils;
}
@Id
@Column(name = "cod_acao", unique = true, nullable = false)
public int getCodAcao() {
return this.codAcao;
}
public void setCodAcao(int codAcao) {
this.codAcao = codAcao;
}
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "cod_tipo_acao")
public AcaoTipo getAcaoTipo() {
return this.acaoTipo;
}
public void setAcaoTipo(AcaoTipo acaoTipo) {
this.acaoTipo = acaoTipo;
}
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "cod_tela", updatable = false, insertable = false)
public Tela getTela() {
return this.tela;
}
public void setTela(Tela tela) {
this.tela = tela;
}
@Column(name = "nome")
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Column(name = "acao", length = 150)
public String getAcao() {
return this.acao;
}
public void setAcao(String acao) {
this.acao = acao;
}
@Column(name = "javascript")
public String getJavascript() {
return this.javascript;
}
public void setJavascript(String javascript) {
this.javascript = javascript;
}
@Column(name = "padrao")
public Boolean getPadrao() {
return this.padrao;
}
public void setPadrao(Boolean padrao) {
this.padrao = padrao;
}
@Column(name = "ativo")
public Boolean getAtivo() {
return this.ativo;
}
public void setAtivo(Boolean ativo) {
this.ativo = ativo;
}
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "acaos")
public Set<Usuario> getUsuarios() {
return this.usuarios;
}
public void setUsuarios(Set<Usuario> usuarios) {
this.usuarios = usuarios;
}
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "acaos")
public Set<Perfil> getPerfils() {
return this.perfils;
}
public void setPerfils(Set<Perfil> perfils) {
this.perfils = perfils;
}
}
As tabelas são essas:
CREATE TABLE acao
(
cod_acao serial NOT NULL,
cod_tela integer,
cod_tipo_acao character(1),
nome character varying(255),
acao character varying(150),
javascript character varying(255),
padrao boolean,
ativo boolean,
CONSTRAINT pk_acao PRIMARY KEY (cod_acao),
CONSTRAINT fk_acao__acao_tipo FOREIGN KEY (cod_tipo_acao)
REFERENCES acao_tipo (cod_acao_tipo) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE RESTRICT,
CONSTRAINT fk_acao__tela FOREIGN KEY (cod_tela)
REFERENCES tela (cod_tela) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
CREATE TABLE tela
(
cod_tela serial NOT NULL,
cod_sistema integer,
cod_tela_pai integer,
nome character varying(255),
ativo boolean,
manutencao boolean,
ordem integer,
tipo character(1) NOT NULL,
cod_arquivo integer,
CONSTRAINT pk_tela PRIMARY KEY (cod_tela),
CONSTRAINT fk_tela__arquivo FOREIGN KEY (cod_arquivo)
REFERENCES arquivo (cod_arquivo) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE SET NULL,
CONSTRAINT fk_tela__sistema FOREIGN KEY (cod_sistema)
REFERENCES sistema (cod_sistema) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE RESTRICT,
CONSTRAINT fk_tela__tela FOREIGN KEY (cod_tela_pai)
REFERENCES tela (cod_tela) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE RESTRICT
)
Eu preciso fazer um select assim com HQL:
SELECT
t.*,
a.nome as acao_padrao
FROM tela t
LEFT JOIN acao a ON t.cod_tela=a.cod_tela AND a.padrao=true
A HQL ficou assim:
SELECT t, a.nome FROM Tela t LEFT OUTER JOIN t.acaos a WITH a.padrao=true
Peguei o SQL que ele gera e monta direitinho o resultado, só que monta o Bean de um jeito que eu não consigo listar os dados. Estou meio perdido com relação a isso.
Alguem pode me ajudar?