Hibernate - ResultTransformer

2 respostas
ACDias

Olá,

Estou precisando buscar dados de duas tabelas distintas e popular objeto não mapeado para o hibernate. Encontrei na documentação do Hibernate o setResultTransformer do SQLQuery, no entanto ele não está populando todos os atributos do meu objeto.

StringBuilder sql = new StringBuilder(); sql.append("SELECT DISTINCT {funcionario.*}, r.registro_time as dateRegistro FROM users funcionario JOIN registro r on r.funcionario_id=funcionario.funcionario_id "); SQLQuery query = getSession().createSQLQuery(sql.toString()); query.addEntity("funcionario", User.class); query.setResultTransformer(Transformers.aliasToBean(MinhaClasse.class));

public class MinhaClasse{ private User funcionario; private Calendar dateRegistro; }

Ele consegue setar o funcionário, no entanto o dateRegistro não é setado.

Agradeço a ajuda.

2 Respostas

E

Provavelmente ah problemas no seu mapeamento, posta ai como estah mapeada as suas classes Funcionario e Registro

ACDias

Eu creio que não, mas em todo caso:

@Entity
@Table(name = "he02")
public class Funcionario implements Serializable {

	private static final long serialVersionUID = 5038469620181825037L;
	@Id
	@Column(name = "he02_at_cod")
	private Integer id;
	@Column(name = "he02_st_matricula")
	private String matricula;
	@Column(name = "he02_st_nome")
	private String nome;
	@Column(name = "he02_dt_dentro")
	@Temporal(TemporalType.TIMESTAMP)
	private Calendar dataCadatro;
	@OneToMany(mappedBy = "funcionario")
	private List<Justificativa> justificativas;
	@OneToOne(mappedBy = "funcionario")
	private User user;
	@OneToMany(mappedBy = "funcionario")
	private List<Observacao> observacoes;
	@OneToMany(mappedBy = "funcionario")
	private List<Registro> registros;
}

@Entity
@Table(name = "users")
public class User implements Serializable {
	private static final long serialVersionUID = 5140880997964725361L;

	@Id
	@Column(name = "user_name", length = 50)
	private String username;
	@Column(name = "user_password", length = 50)
	private String password;
	@OneToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "funcionario_id", referencedColumnName = "he02_at_cod")
	private Funcionario funcionario;
}

@Entity
@Table(name = "he22")
public class Registro implements Serializable {
	private static final long serialVersionUID = 4962790303788114183L;
	@Id
	@Column(name = "he22_at_cod")
	private Integer id;
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "he22_dt_registro")
	private Calendar time;
	@Column(name = "he22_bl_saida")
	private Integer saida;
	@ManyToOne
	@JoinColumn(name = "he22_st_matricula", referencedColumnName = "he02_st_matricula")
	private Funcionario funcionario;
}
Criado 8 de abril de 2009
Ultima resposta 14 de abr. de 2009
Respostas 2
Participantes 2