JPA/Hibernate...duvida com criteria no relacionamento com outro objeto

3 respostas
P

outra duvida com criteria quando tenho query que monto
onde o tipo de documento igual 1 e o valor igual CPF200
teria que voltar somente esse registro mas volta dois
pois esse usuário tem dois registros mas quando vou
ler getDocuments do user vem dois como posso fazer para acertar isso ?

abs

class user {
@Id
  private id;

@OneToMany(mappedBy = "user",cascade =javax.persistence.CascadeType.ALL)
private List<Document> documents = new ArrayList<Document>();

-----

public class Document {

	@Id
	@GeneratedValue
	@Column(name = "DOCUMENT_ID")
	private long id;
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn ( name = "USER_ID")
	private ImsUserImpl user;

            @Column
      private String type;

            @Column
      private String valor;
--como está no banco 

select * from document

id     user   type        valor
1       11     1             CPF200
2       11     2             RG100

3 Respostas

jcmird

Olá garoto!
Poderia ser mais claro! Pois se utilizar o where no seu select passando o parametro de id=1 e valor=CPF200 é para trazer apenas um registro. Posta o codigo de seu criteria assim fica mais facil para ajudar - lo.

Abraços

P

na linha onde tem DocumentType.CPF:

  • estou passando o Type (Enum) que é igual 1 (CPF)
  • e como o usuário escolheu “=” uso a Restriction “eq” onde tem o valor digitado
-- essa é a parte onde trato CPF 

Criteria c = session.createCriteria(User.class,"user");
else if (ccs.getCampo().equals("CPF")){
		c.createAlias(ccs.getNomeTabela(), ccs.getNomeTabela());
		c.add( Restrictions.eq(ccs.getNomeTabela()+".type", DocumentType.CPF) );
		if ( "=".equals(ccs.getCondicao()) )
			   c.add( Restrictions.eq(ccs.getNomeTabela()+".value", ccs.getValor()) );
P

acontece qdo vou ler user.getDocuments() do objeto User
que tras dois registros conforme abaixo …
deveria ter um where tipo = ? and value=? e não tem só tem esse where na primera vez que montou o select
compreendeu agora o que aconteceu

Hibernate: select documents0_.USER_ID as USER4_1_, documents0_.DOCUMENT_ID as DOCUMENT1_1_, documents0_.DOCUMENT_ID as DOCUMENT1_18_0_, documents0_.document_type as document2_18_0_, documents0_.USER_ID as USER4_18_0_, documents0_.value as value18_0_ from _DOCUMENT documents0_ where documents0_.USER_ID=?

for (Iterator iterator = result.iterator(); iterator.hasNext();) {
				User user = (User) iterator.next();
				System.out.println("** Id ="+user.getId());
				for (Document doc: user.getDocuments()){
					System.out.println("-------------------------------------");
					System.out.println("   ** Document Id ="+doc.getId());
					System.out.println("   ** Document Valor ="+doc.getValue());
					System.out.println("   ** Document Valor ="+doc.getUser().getId()+"-"+doc.getUser().getName());
					
				}
				System.out.println("-------------------------------------");
	        }
Criado 27 de janeiro de 2009
Ultima resposta 27 de jan. de 2009
Respostas 3
Participantes 2