# [EJB QL] Warum bekomme ich kein Result?



## Tobias (22. Nov 2007)

Hallo,

ich werde aus einem (eigentlich ganz einfachen) EJB QL-Statement einfach nicht schlau. Ich habe folgende Daten in der Datenbank:

Tabelle Files:
id UNSIGNED INT AUTO_INCREMENT PRIMARY KEY
urn VARCHAR INDEX UNIQUE NOT NULL
clob CLOB
blob BLOB
discriminator VARCHAR NOT NULL

1 - test_seite1.xml - XML-Daten - NULL - Xul
2 - test_seite2.xml - XML-Daten - NULL - Xul
3 - test_seite3.xml - XML-Daten - NULL - Xul

Darauf lasse ich folgendes EJB QL-Statement los:


```
from XULFile xf where xf.urn=:name
```

Wobei :name momentan hart kodiert auf test_seite1.xml gesetzt wird.

Laut JBoss-Log generiert Hibernate daraus folgendes SQL-Statement:


```
select xulfile0_.urn as urn2_, xulfile0_.clob as clob2_ from files xulfile0_ where xulfile0_.discriminator='Xul' and xulfile0_.urn=?
```

Wenn ich das in PHPMyAdmin auf meine Datenbank loslasse (wobei ich das Fragezeichen natürlich durch 'test_seite1.xml' ersetze), bekomme ich genau das Ergebnis, das ich haben will, nämlich den Datensatz von test_seite1.xml.

Mein XULServiceBean aber behauptet stets, es gebe kein Ergebnis. Hier der Code der Methode, die das Abfragen für mich erledigt:


```
private FileBase getData(String queryString, URI urn) {
		logger.debug("Query = " + queryString + ", :name = " + urn);
		Query query = entityManager.createQuery(queryString);
		query.setParameter("name", "test_seite1.xml");
		// query.setParameter("name", urn.toString());

		return (FileBase) query.getSingleResult();
	}
```

Ich werde nicht schlau aus dieser Sache... Kann jemand helfen?

mpG
Tobias


----------



## SlaterB (22. Nov 2007)

an dieser Stelle würde ich 

1. den String direkt in den Query-String schreiben mit einfachen Anführungszeichen '', so wie in SQL

2. 
'select xulfile0_.urn as urn2_, xulfile0_.clob as clob2_ from files xulfile0_'
sowieso erstmal durch
'select count(*)' ersetzen

3.
alle Objekte laden und die Anzahl mit SQL vergleichen,

4.
alle xulfile0_.urn laden und mit String.equals mit deinem Suchstring vergleichen

5.
die Anzahl der Treffer langsam einschränken mit
xulfile0_.urn LIKE 'test%'


----------



## Tobias (22. Nov 2007)

Danke SlaterB,

ich hab erstmal Tipp 1 ausprobiert und bekomme jetzt eine Hibernate SerializationException "could not deserialize" (Grund ist eine StreamCorruptedException "invalid Stream Header").

Ausgeführtes EJB QL:


```
from XULFile xf where xf.urn='test_seite1.xml'
```

Wenn ich raten sollte, würde ich sagen, das Problem ist, das er aus dem Stringwert keine URI bauen kann... Würdest du mir da zustimmen? Kann ich ihm das beibringen oder muss ich einfach meine Entity Bean ändern, damit sie Strings speichert und nur URI-Getter-Methoden anbietet?

mpG
Tobias


----------



## SlaterB (22. Nov 2007)

vielleicht wird das Objekt geladen aber nun da das Ergebnis nicht null ist,
kann das Ergebnis nicht erstellt werden?
hast du jemals ein XULFile-Objekt erfolgreich geladen?

---------

wie ist urn in den Objekt gemappt, als URI/ URN?
kannst du ein anderes URN aus dem String zusammenbauen und dann 

Query query = entityManager.createQuery(queryString); 
      query.setParameter("name", urn); 
ausführen?


direkt kann ich nichts dazu sagen, kenne weder EJB QL noch die Art des Fehlers


----------

