Trazendo o tamanho de um set mapeado em com usando projeções com criteria

6 respostas
D

Bom dia pessoall.
Tenho seguinte consulta:

Criteria criteria=getSession().createCriteria(Empresa.class)
        .setProjection(Projections.distinct(Projections.projectionList()
        .add(Projections.property("id").as("codigo"))
        .add(Projections.property("nome").as("nome"))
        .add(Projections.property("pacientes").as("pacientes")))
         .setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);

Onde pacientes é set eu preciso saber dele entretanto nesta consulta
o hibernate não inicia o set mesmo colocando o setResultTransformer(Transformers.ROOT_ENTITY), tentei
colocar a anotação @LazyCollection(LazyCollectionOption.EXTRA) em cima do set também não funcionou.

Agradeço qualquer sugestão.

6 Respostas

marcelo.bellissimo

Tentou dar um empresa.getPacientes() na marra pra ver o que acontece ?

D

Não tem getPacientes e lista projetada.
Eu agradeço ou tra sugestão que vc possa dar.

marcelo.bellissimo

Como que tá mapeada a sua classe Empresa ?

D
@Entity
@Table(name="tb_empresa")
public class Empresa implements {
	@Id
	@SequenceGenerator(name="seq_empresa", sequenceName="seq_empresa", allocationSize=1)
	@GeneratedValue(strategy=GenerationType.AUTO, generator="seq_empresa")
	@Column(name="pk_empresa")
	private Long id;
		
	@Column(name="inicio_cobranca")
	@Temporal(TemporalType.TIMESTAMP)
	private Date inicioCobranca;
	
	@Column(name="num_identificacao")
	private String identificador;
	
	@Column(name="tp_identificacao")
	private String tipoIdentificador;
	
	@Column(name="adimplente")
	private String adimplente;
	
			
		
	@ManyToMany(fetch=FetchType.LAZY)
	@JoinTable(name="rl_empresa_paciente", joinColumns={@JoinColumn(name="pk_empresa")},inverseJoinColumns={@JoinColumn(name="pk_paciente")})
	private Set<Paciente>pacientes;
}

Agradeço qualquer, sugestão.

marcelo.bellissimo

@ManyToMany(fetch=FetchType.LAZY) @JoinTable(name="rl_empresa_paciente", joinColumns= {@JoinColumn(name="pk_empresa")},inverseJoinColumns={@JoinColumn(name="pk_paciente")}) private Set<Paciente>pacientes;

Sua collection está como Lazy, tente recuperar o objeto Empresa, e depois utilizar o getter desse atributo pacientes (tem que existir, se não existir crie um)…

Ao realizar essa linha ele deverá realizar a busca automaticamente e trazer o seu Set preenchido…

D

Acho que não expliquei bem esta entidade empresa possui relacionamento com outras 40
tabelas do banco, além de possui outros atributos, ou seja, se buscar o objeto todo objeto
a consulta vai ficar muito pesada levando em conta que serão mais de mil empresas cadastradas.
Caso eu faça uma consulta completa virão muito atributos os quais eu não preciso e que irão pesar demais
minha aplicação, dai eu uso o projections que me traz um list de arrays das propiedades que eu
quero.

Caso tenha qual quer outra sugestão por favor me fale.

Criado 11 de fevereiro de 2010
Ultima resposta 11 de fev. de 2010
Respostas 6
Participantes 2