Consulta Hibernate

3 respostas
pauloperes

Prezados,

Estou com uma dúvida de como realzar uma consulta no Hibernate, vejam tenho uma classe chamada Shelf, nesta tem um campo chamado city que é o campo que faz relacionamento com a tabela City, tenho um método findByExample e outro findByCriteria, tanto um como o outro não funcionou, gostaria de saber como efetuar a consulta na classe Shelf passando como parametro o objeto City, vejam as minhas classes:

@Entity
@Table(name="SHELF")
public class Shelf {

    @Id()
    @Column(name="IP")
    private String ip;

    @Column(name="NAME", nullable=true)
    private String name;

    @Column(name="DATE", nullable=true)
    @Temporal(TemporalType.DATE)
    private Calendar date;

    @Column(name="SERIAL", nullable=true)
    private String serial;

    @ManyToOne()
    @JoinColumn(name="CITY_FK")
    private City city;

    @ManyToOne()
    @JoinColumn(name="SHELF_MODEL_FK")
    private ShelfModel shelfModel;

   

    public Shelf() {
    }

    public Shelf(String ip, String name, Calendar date, String serial, City city, ShelfModel shelfModel) {
        this.ip = ip;
        this.name = name;
        this.date = date;
        this.serial = serial;
        this.city = city;
        this.shelfModel = shelfModel;
    }

    public City getCity() {
        return city;
    }

    public void setCity(City city) {
        this.city = city;
    }

    public Calendar getDate() {
        return date;
    }

    public void setDate(Calendar date) {
        this.date = date;
    }

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSerial() {
        return serial;
    }

    public void setSerial(String serial) {
        this.serial = serial;
    }

    public ShelfModel getShelfModel() {
        return shelfModel;
    }

    public void setShelfModel(ShelfModel shelfModel) {
        this.shelfModel = shelfModel;
    }

    public String toString(){
        return getName();
    }
   
}

Classe City

@Entity
@Table(name="CITY")
public class City {

    @Id()
    @Column(name="SYMBOL")
    private String symbol;

    @Column(name="NAME", nullable=true)
    private String name;

    @Column(name="COORDINATOR", nullable=true)
    private String coordinator;

    @Column(name="MAIL_COORDINATOR", nullable=true)
    private String mailCoordinator;

    public City() {
    }

    public City(String symbol, String name, String coordinator, String mailCoordinator) {
        this.symbol = symbol;
        this.name = name;
        this.coordinator = coordinator;
        this.mailCoordinator = mailCoordinator;
    }

    public String getCoordinator() {
        return coordinator;
    }

    public void setCoordinator(String coordinator) {
        this.coordinator = coordinator;
    }

    public String getMailCoordinator() {
        return mailCoordinator;
    }

    public void setMailCoordinator(String mailCoordinator) {
        this.mailCoordinator = mailCoordinator;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSymbol() {
        return symbol;
    }

    public void setSymbol(String symbol) {
        this.symbol = symbol;
    }

    public String toString(){
        return this.getName();
    }
}

Classe DaoHibernate

public class DaoHibernate<T> implements Dao<T> {

    private Session session;
    private Class persistentClass;

    public DaoHibernate(Session session, Class persistentClass) {
        this.session = session;
        this.persistentClass = persistentClass;
    }

    public Class getPersistentClass() {
        return persistentClass;
    }

    public void setPersistentClass(Class persistentClass) {
        this.persistentClass = persistentClass;
    }

    public Session getSession() {
        return session;
    }

    public void setSession(Session session) {
        this.session = session;
    }

    public void persist(T t) {
        getSession().save(t);
    }

    public void remove(T t) {
        getSession().delete(t);
    }

    public T search(Serializable id) {
        return (T) getSession().load(persistentClass, id);
    }

    public List<T> listAll() {
        return getSession().createCriteria(persistentClass).list();
    }

    public void update(T t) {
        getSession().update(t);
    }

    public List<T> findByExample(T example) {
        Criteria crit = getSession().createCriteria(persistentClass);
        Example ex = Example.create(example);
        crit.add(ex);
        return crit.list();
    }

    public List<T> findByCriteria(Criterion... criterions){
        Criteria crit = getSession().createCriteria(persistentClass);
        for(Criterion c : criterions){
            crit.add(c);
        }

        return crit.list();
    }

}

Att,

3 Respostas

Jair_Rillo_Junior

Por Criteria, você pode fazer algo assim

Criteria criteria = getSession().createCriteria(Shelf.class);
criteria.add(Restriction.eq("shelf.city",passa_seu_parametro_aqui));
//Chama o método findByCriteria passando a criteria acima como parametro

É algo do tipo

Marky.Vasconcelos
public List<T> findByCriteria(Criterion... criterions){  
         Criteria crit = getSession().createCriteria(persistentClass);  
         for(Criterion c : criterions){  
             crit.add(c);  
         }  
   
         return crit.list();  
     }

Tenho um método exatamente igual a esse e funciona corretamente.
A questão é: como é chamado?

No meu código vou ter algo assim

DaoHibernate<Shelf> dao = //Cria o dao e associa a session
List<Shelf> list = dao.findByCriteria(Restrictions.eq("city",objetoCidadeAqui));
pauloperes

VAleu, estava chamando errado o método.

Criado 9 de março de 2009
Ultima resposta 9 de mar. de 2009
Respostas 3
Participantes 3