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