Hibernate nao traz resultados da pesquisa

7 respostas
pauloperes

Ola a todos,

Vejam tenho duas classes que se relacionam.

Shelf e ShelfModel

/**
 *
 * @author Paulo Henrique Peres <[email removido]>
 */
@Entity
@Table(name="SHELF_MODEL")
public class ShelfModel implements Serializable {
    @Id()
    @Column(name="NAME")
    private String name;

    @Column(name="MANUFACTURER", nullable=false)
    private String manufacturer;

    @OneToMany(mappedBy = "shelfModel", fetch=FetchType.LAZY)
    private List<Shelf> shelves = new ArrayList<Shelf>();

    public ShelfModel() {
    }

    public ShelfModel(String name) {
        this.name = name;
    }
    
    public ShelfModel(String name, String manufacturer) {
        this.name = name;
        this.manufacturer = manufacturer;
    }

    public String getManufacturer() {
        return manufacturer;
    }

    public void setManufacturer(String manufacturer) {
        this.manufacturer = manufacturer;
    }

    public String getName() {
        return name;
    }

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

    public List<Shelf> getShelves() {
        return shelves;
    }

    public void setShelves(List<Shelf> shelves) {
        this.shelves = shelves;
    }
    
}
/**
 *
 * @author Paulo Henrique Peres <[email removido]>
 */
@Entity
@Table(name="SHELF")
public class Shelf implements Serializable {

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

    @ManyToOne()
    private City city;

    @ManyToOne    
    private ShelfModel shelfModel;

    public Shelf() {
    }

    public Shelf(String ip) {
        this.ip = ip;
    }

    public City getCity() {
        return city;
    }

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

    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 ShelfModel getShelfModel() {
        return shelfModel;
    }

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

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Shelf other = (Shelf) obj;
        if ((this.ip == null) ? (other.ip != null) : !this.ip.equals(other.ip)) {
            return false;
        }
        return true;
    }

Tenho em um dao um método que recupera um shelfModel pelo nome.

public ShelfModel getModelShelfByName(String model) {
        Criteria criteria = this.session.createCriteria(Shelf.class);
        criteria.add(Expression.ilike("name", model, MatchMode.EXACT));
        return (ShelfModel) criteria.uniqueResult();
    }

Quando tento fazer a consulta o resultado sempre vem nulo, faco a mesma consulta diretamente no banco e o resultados aparecem.

Tentei também assim, mas o resultado, ou seja, o numero de shelves vem como 0.

ShelfModel shelfModel = new ShelfModel("MILEGATE2500");                
        System.out.println(shelfModel.getShelves().size());

alguem sabe o que pode estar acontecendo?

7 Respostas

rogelgarcia

ShelfModel shelfModel = new ShelfModel("MILEGATE2500"); System.out.println(shelfModel.getShelves().size());

Se voce criou o objeto a lista tá vazia… em nenhum momemnto o hibernate foi no banco buscar mais nada… entao se vc quiser saber o tamanho da lista o objeto tem que vim do hibernate…

public ShelfModel getModelShelfByName(String model) { Criteria criteria = this.session.createCriteria(Shelf.class); criteria.add(Expression.ilike("name", model, MatchMode.EXACT)); return (ShelfModel) criteria.uniqueResult(); }

Confira melhor, veja se o model que vc tá passando como parametro é o mesmo que vc usou na pesquisa do banco… e se a query é igual também

pauloperes

Kra, no primeiro caso ele nao teria que buscar ja que o relacionamento esta mapeado?

rogelgarcia

Nao

pauloperes

Kra revisei tudo e nada, o mesmo parametro que eu passo na minha query eu to passando no Java e meu método nao retorna nenhum registro.

pauloperes

so um detalhe o campo name é a chave primaria da tabela.

pauloperes

Consegui, como tinha copiado e colado o meu codigo de outro dao, da classe Shelf, .class no metodo, por isso que nao retornava nada.

rsrsr

rogelgarcia

heheheeh

Criado 24 de março de 2010
Ultima resposta 24 de mar. de 2010
Respostas 7
Participantes 2