Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[spring webflow+hibernate] findByExample geeft hele dbase

Pagina: 1
Acties:

  • redfox314
  • Registratie: December 2004
  • Laatst online: 07-11 14:35
Ik ben een webappje aan het bouwen met behulp van spring webflow en hibernate.
Nu wil ik aan de hand van een object dat gemapt is op een tabel in een database met
org.springframework.orm.hibernate3.HibernateTemplate.findByExample() een beperkte lijst van deze entries opvragen. Ik maak dus zo'n object met een aantal velden ingevuld en de rest null.
Welk veld ik ook invul ik krijg heel mijn tabel terug en niet alleen de dingen die matchen aan wat ik heb ingevuld.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public List<Lid> findByExample(Lid instance) {
        log.debug("finding Lid instance by example");
        log.debug(instance);
        try {
            if (instance!=null){
                
            List<Lid> results = new LinkedList<Lid>(getHibernateTemplate().findByExample(instance));
            log.debug("find by example successful, result size: "
                    + results.size());
            return results;
            } else
                return new LinkedList<Lid>(getHibernateTemplate().loadAll(Lid.class));
        } catch (RuntimeException re) {
            log.error("find by example failed", re);
            throw re;
        }
    }


zoals je ziet gooi ik de example instance in mijn log. Als ik dan mijn logs open dan zie ik dat het object perfect doorgegeven wordt dus daar kan het al niet aan liggen.

Ik heb in de hibernate documentation hetvolgende gevonden over de creatie van criteria aan de hand van example instances
Version properties, identifiers and associations are ignored. By default, null valued properties are excluded.
Nogal vaag dus, kan iemand verduidelijken wat ze hiermee bedoelen?

***EDIT***

Heb ondertussen uitgevist wat ze bedoelen. Alles wat een id (primary key) is van je persistent class wordt genegeerd (ook handig NOT) en associations (references naar andere tabellen dus) ook.

Heb dus handmatig criteria toegevoegd om de (composiet) key van mij class mee te laten spelen.
Is er hier een elegantere manier voor?

Hoe doe je dit dan met associaties. Mijn persistent class ( A ) behoort tot een aantal categoriën die in een andere persistent class ( B ) zijn opgeslagen. Dat resulteert dus in een collection van B in mijn class A. Hoe kan ik nu aan hibernate vragen geef mij alle A waarvan er items uit een modellijst van B voorkomen in de B lijst van die A?

[ Voor 18% gewijzigd door redfox314 op 03-04-2008 22:55 ]


  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 11:45

Salandur

Software Engineer

Als je op ID wilt laden of op basis van een natural key kan je dat het beste met Criteria doen.

TIP: zet 'org.hibernate.SQL' in je logging op debug, dan kan je zien welke sql statements hibernate gegenereerd heeft.

Assumptions are the mother of all fuck ups | iRacing Profiel


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Ik meen dat je altijd je Example moet maken m.b.v. Example.create(instance);

Wat daar uitkomt, stop je in de findByExample call.

Probeer dat eens.

Fat Pizza's pizza, they are big and they are cheezy


  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 11:45

Salandur

Software Engineer

de HibernateTemplate doet dat voor je

Assumptions are the mother of all fuck ups | iRacing Profiel


  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 19:37

Nick_S

++?????++ Out of Cheese Error

redfox314 schreef op donderdag 03 april 2008 @ 21:58:
Heb ondertussen uitgevist wat ze bedoelen. Alles wat een id (primary key) is van je persistent class wordt genegeerd (ook handig NOT) en associations (references naar andere tabellen dus) ook.
Uhh, dat is wel handig..., waarom zou je een findByExample op je primary key (=uniek, dus maar 1 mogelijkheid) willen doen?

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


  • redfox314
  • Registratie: December 2004
  • Laatst online: 07-11 14:35
Je kan de hitcriteria blijkbaar niet configgen met de HibernateTemplate.findByExample
Dat probleem heb ik nu opgelost door DetachedCriteria te gebruiken en daar een Example object te creëren,dat te configgen en vervolgens aan die criteria nog restrictions door te voeren over een of meer primary key velden.

Nu nog de associaties. Wat ik ook nog wil kunnen is geef mij alle A's die behoren bij B1 of B2 of ..
Die lijst met Bi zit in een example A object.

Zij A de tabel met klassen die ik zoek
Zij B de tabel met categoriën voor A
Zij C de tabel die B's toewijst aan A's
en a een instance van een persistent class corresponderend met A.
Deze bevat dus een set met bi instance van B van grootte n

Dan zoek ik iets dat de volgende query creëert.

SELECT * from A join C on A.id=C.A_id where B_id in (b1,b2,...,bn)

Verwijderd

Even offtopic maar wel erg belangrijk:

Regels als "log.error("find by example failed", re);" zeggen helemaal niets. Tenminste, niet meer dan dat een standaard stacktrace je ook al verteld. Zet dus in je error messages of de (custom)excepties die je re-throwed zoveel mogelijk over je huidige state. In de regel zijn dat vooral je methode argumenten.

  • redfox314
  • Registratie: December 2004
  • Laatst online: 07-11 14:35
Verwijderd schreef op vrijdag 04 april 2008 @ 13:52:
Even offtopic maar wel erg belangrijk:

Regels als "log.error("find by example failed", re);" zeggen helemaal niets. Tenminste, niet meer dan dat een standaard stacktrace je ook al verteld. Zet dus in je error messages of de (custom)excepties die je re-throwed zoveel mogelijk over je huidige state. In de regel zijn dat vooral je methode argumenten.
had ik ook al bedacht zie maar op regel 3 van de code
Pagina: 1