amigos,
to começando a utilizar a api criteira… no meu codigo o list resultante tem todos os campos da classe que eu criei o criteria… mas eu precisava trazer os campos das classes que eu fiz os 2 joins… como eu faço isso??
segue codigo
public ConsGlobal(Long mes){
em = (EntityManager) Conectar.getsession();
sess = (Session) em.getDelegate();
crit = sess.createCriteria(ConsOrcamento.class)
.setFetchMode("TbrjCadCtCusto", FetchMode.JOIN)
.setFetchMode("TbrjCadFornecedor", FetchMode.JOIN)
.add(Restrictions.like("ctCusto", "8%"))
.add(Restrictions.eq("mes", mes));
}
se suas classes tem os relacionamentos corretos, deveriam vir carregados, isso se o fetch não estiver lazy
o problema é de relacionamento mesmo…mas nao to conseguindo resolver… alguem pode me ajudar?? O Campo CadConta é a chave entre as tabelas… 1 registro na TbrjCadContas pra muitos na ConsOrcamento… segue as 2 classes
public class ConsOrcamento implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "DT")
@Temporal(TemporalType.DATE)
private Date dt;
@Column(name = "MES")
private Long mes;
@Id
@Column(name = "COD_CONTA")
@ManyToOne (targetEntity = tabelas.TbrjCadContas.class )
@JoinColumn(name = "CodConta")
private BigInteger codConta;
@Size(max = 45)
@Column(name = "FORNECEDOR")
private String fornecedor;
@Column(name = "ORCADO")
private Float orcado;
@Column(name = "GASTO")
private Double gasto;
@Size(max = 45)
@Column(name = "CT_CUSTO")
private String ctCusto;
@Column(name = "EMPRESA")
private Integer empresa;
public ConsOrcamento() {
}
public Date getDt() {
return dt;
}
public void setDt(Date dt) {
this.dt = dt;
}
public Long getMes() {
return mes;
}
public void setMes(Long mes) {
this.mes = mes;
}
public BigInteger getCodConta() {
return codConta;
}
public void setCodConta(BigInteger codConta) {
this.codConta = codConta;
}
public String getFornecedor() {
return fornecedor;
}
public void setFornecedor(String fornecedor) {
this.fornecedor = fornecedor;
}
public Float getOrcado() {
return orcado;
}
public void setOrcado(Float orcado) {
this.orcado = orcado;
}
public Double getGasto() {
return gasto;
}
public void setGasto(Double gasto) {
this.gasto = gasto;
}
public String getCtCusto() {
return ctCusto;
}
public void setCtCusto(String ctCusto) {
this.ctCusto = ctCusto;
}
public Integer getEmpresa() {
return empresa;
}
public void setEmpresa(Integer empresa) {
this.empresa = empresa;
}
}
public class TbrjCadContas implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "idTBRJ_CAD_CONTAS")
private Integer idTBRJCADCONTAS;
@Column(name = "COD_CONTA")
private BigInteger codConta;
@Column(name = "CONTA")
private String conta;
@Column(name = "NATUREZA")
private String natureza;
public TbrjCadContas() {
}
public TbrjCadContas(Integer idTBRJCADCONTAS) {
this.idTBRJCADCONTAS = idTBRJCADCONTAS;
}
public Integer getIdTBRJCADCONTAS() {
return idTBRJCADCONTAS;
}
public void setIdTBRJCADCONTAS(Integer idTBRJCADCONTAS) {
this.idTBRJCADCONTAS = idTBRJCADCONTAS;
}
public BigInteger getCodConta() {
return codConta;
}
public void setCodConta(BigInteger codConta) {
this.codConta = codConta;
}
public String getConta() {
return conta;
}
public void setConta(String conta) {
this.conta = conta;
}
public String getNatureza() {
return natureza;
}
public void setNatureza(String natureza) {
this.natureza = natureza;
}
@Override
public int hashCode() {
int hash = 0;
hash += (idTBRJCADCONTAS != null ? idTBRJCADCONTAS.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof TbrjCadContas)) {
return false;
}
TbrjCadContas other = (TbrjCadContas) object;
if ((this.idTBRJCADCONTAS == null && other.idTBRJCADCONTAS != null) || (this.idTBRJCADCONTAS != null && !this.idTBRJCADCONTAS.equals(other.idTBRJCADCONTAS))) {
return false;
}
return true;
}
@Override
public String toString() {
return "tabelas.TbrjCadContas[idTBRJCADCONTAS=" + idTBRJCADCONTAS + "]";
}
}
eu tive um problema muito semelhante ao seu um tempo atras… e consegui resolver da seguinte maneira.
@ManyToOne (fetch = FetchType.EAGER)
@JoinColumn (name = "CodConta")
@Fetch (FetchMode.JOIN)
private BigInteger codConta;
coloque este código na sua classe ConsOrcamento para ver se resolve…
quando eu tive este problema eu fiz desta maneira e resolveu.