Nobres,
Estou tendo problemas com o lazy, porem parece que o hibernate “ignora” a mudança do lazy para eager em tempo de execução.
Os mapeamentos:
public class Agencia implements Serializable {
private static final long serialVersionUID = -8134854741622386928L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "SEQ_AGENCIA")
private Integer cdAgencia;
private String nmAgencia;
@OneToOne(targetEntity = Telefone.class, fetch = FetchType.LAZY,cascade=CascadeType.ALL)
@JoinColumn(name = "cdTelefone", referencedColumnName = "cdTelefone")
private Telefone cdTelefone;
@OneToOne(targetEntity = Endereco.class, fetch = FetchType.LAZY, cascade=CascadeType.ALL)
@JoinColumn(name = "cdEndereco", referencedColumnName = "cdEndereco" )
private Endereco cdEndereco;
}
A pesquisa…
public static void main(String[] args) {
Session s = HibernateUtil.getSession();
Criteria c = s.createCriteria(Agencia.class,"a");
ProjectionList pl = Projections.projectionList();
pl.add(Projections.id().as("cdAgencia"));
pl.add(Projections.property("a.nmAgencia").as("nmAgencia"));
pl.add(Projections.property("a.cdTelefone").as("cdTelefone") );
pl.add(Projections.property("a.cdEndereco").as("cdEndereco"));
c.setFetchMode("cdEndereco", FetchMode.JOIN);
c.setFetchMode("cdTelefone", FetchMode.JOIN);
c.setProjection(pl);
c.addOrder(Order.asc("nmAgencia"));
c.setResultTransformer(Transformers.aliasToBean(Agencia.class));
List<Agencia> lista = c.list();
s.close();
for ( Agencia a : lista ) {
System.out.println( "nmAgencia:" + a.getNmAgencia() );
// aqui gera o lazy :(
System.out.println( "nrTelefone" + a.getCdTelefone().getNrTelefone() );
}
}
O criteria parece me ignorar…
Alguem saberia dizer o que estou fazendo de errado?