Galera seguinte to ficando doido estou desenvolvendo um sistema e ele utiliza recursividade
e nao sei como fazer no hibernate presciso de ajuda vejam bem
Na classe Associados vou usar logica recursiva
tem alguns campos
o IdAssociado (Filho)
e o IdIndicado (Pai)
como faço uma consulta recursiva com hibernate
Estou usando o hibernate annottations + vraptor + jsp
Cara,
vou te passar um exemplo semelhante que funciona aqui pra mim…
No caso de Cadastros de menu, um menu pode ter sub-menus, o que também é recursivo como no seu exemplo, e anotamos a classe da seguinte maneira…
@Entity
@Table(name="menu")
public class Menu implements Serializable{
private Integer id;
private String nome;
private String className;
private Menu menuPai;
public Menu() {
}
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id_menu")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(nullable=false, length=50)
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Column(nullable=false, length=100)
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
@ManyToOne
@JoinColumn(name="id_menu_pai", insertable=false, updatable=false, nullable=true)
public Menu getMenuPai() {
return menuPai;
}
}
espero que ajude
[]'s
Então Imprates eu ja anotei as classes esta funcionando so presciso sabe como faço as consultas mesmo entende
@Entity
public class Associado{
// Fields
@Id
@GeneratedValue
private Long idAssociado;
//private Integer idConveniado;
//private String assoCodHierarquia;
private Long idIndicado;
//@OneToOne
//@JoinColumn(name="idIndicado")
//private Associado idIndicado;
// (aqui tenho duvida se faço a anotacao dessa forma ou como esta criando apenas um Long que recebe o id, do jeito que esta cadastra normalmente!!! me digam ai se e necessario que eu faço da segunda forma pois nao consegui fazer funcionar da segunda forma rsrs.
setter and getters
}
então e sobre a consulta sei que vou ter que usar sql native pois parece me que hql nao tem consultas recursivas certo!!!
então alguem? me ajudem ai por favor!
O tópico é antigo, mas cheguei nesse mesmo problema.
Tenho uma consulta para o Banco DB2 que é recursiva. Não tenho nem idéia como fazer no hibernate isso.
Se alguém já utilizou algo, posta umas dicas ai, valeu.
bom, eu fiz o seguinte: eu tenho um funcionario, e ele tem um superior, que também é um funcionário. não consegui fazer consulta recursiva, tive que colocar uma lógica no dao pra fazer funcionar (Vide POG no google, :lol: )
/**
* Obtém uma lista com todos subordinados do colaborador. inclui também subordinários
* temporários, por substituição/ausencia do titular.
*
* @param superior Colaborador superior
* @return Lista dos colaboradores abaixo do superior informado
*/
@SuppressWarnings("unchecked")
public List<Colaborador> listSubordinados(Colaborador superior){
List<Colaborador> lista = new ArrayList<Colaborador>();
List<Colaborador> listaSubstituto = new ArrayList<Colaborador>();
List<Long> ids = new ArrayList<Long>();
DetachedCriteria critSubst = DetachedCriteria.forClass(Colaborador.class);
critSubst.add(Restrictions.eq("colaboradorSubstituto.id", superior.getId()));
listaSubstituto = (List<Colaborador>) hibernateTemplate.findByCriteria(critSubst);
ids.add(superior.getId());
for (Colaborador c : listaSubstituto) {
ids.add(c.getId());
}
DetachedCriteria crit = DetachedCriteria.forClass(Colaborador.class);
crit.add(Restrictions.in("colaboradorImediato.id", ids));
crit.addOrder(Order.asc("nome"));
lista.addAll((List<Colaborador>) hibernateTemplate.findByCriteria(crit));
return lista;
}
não consegui fazer de outro jeito que não fosse com duas consultas
[quote=romarcio]O tópico é antigo, mas cheguei nesse mesmo problema.
Tenho uma consulta para o Banco DB2 que é recursiva. Não tenho nem idéia como fazer no hibernate isso.
Se alguém já utilizou algo, posta umas dicas ai, valeu.[/quote]
Que eu saiba não tem como, a menos que use uma linguagem de consulta lógica ao inves de SQL.
Pois eh, acabei usando o sql-query no mesmo arquivo do mapeamento do hibernate.
Dai posso pegar o parametro que preciso de um campo que faz parte do mapeamento.
<sql-query name="DebitosAnteriores">
<return-scalar column="ANO_EXERCICIO" type="integer"/>
.
aqui vai a query rescursiva, normal como se fosse executada no banco.
.
</sql-query>