Az egyik legnagyobb probléma az objektum-relációs leképezéssel, hogy a relációs modell objektumorientált nyelvi objektumba való konvertálása sok munkával jár. Az objektum szinten lévő lekérdezések természete, illetve az O-R mapping tool (a konverziót végző eszköz) működése miatt egy lekérdezés általában durvább eredményt ad, mint amit egy sztenderd JDBC hívással elérhető.
Példa Tekintsük az alábbi fa-struktúrát: public class Node { private List<Node> children; private Node parent; private String name;
public List<Node> getChildren() { return children;
public Node getParent() { return parent;
public void setChildren(List<Node> children) { this.children = children;
public void setParent(Node parent) { this.parent = parent;
// ... }
A fenti Node osztály elég complex asszociációkat tartalmaz, egy egyszerű O-R mapper valószínűleg a teljes ‘Node’ táblát betöltené, hogy egy Node objektumot létrehozzon. Vegyük az alábbi fa struktúrát: -A | *---B
| *---C
| *---D
| *---E
| *---F
| *---G *---H
Ha egy naiv O-R mapper-től C betöltését kérjük, ahhoz be kéne töltenie B-t (mivel az C apja), de B teljes betöltéséhez szükséges betölteni D-t (mivel az B gyereke) is, ami E, F, G betöltését is szükségessé teszi. Ezután folytatódna B betöltése A betöltésével, ami H betöltését is szükségessé teszi. Eredményül a teljes fát be kellett tölteni. Eközben minden asszociációs populáció külön-külön egy egyedi SQL select utasítás megadását igényli. Ez 8 gazzillion utasítást jelent csak a fenti példához. A node-ok számának növelésével pedig az SQL hívások száma lineárisan növekszik.
Ezt nevezzük n+1 problémának.
Kategória:Java API-k