# Help - EJB2 - Problem mit Hybernate und "LIMIT"



## Bumbum564 (14. Nov 2007)

Hallo ich bekomme Fehler in der Console angezeigt sobald ich mein Projekt auf den JBoss deployen will.

In meinem EntityBean habe ich einen Finder hinzugefügt, welcher wie folgt aussieht:


```
* @ejb.finder signature = "Mitarbeiter findSatzbyId(java.lang.Integer id)"
 *             description = "Find Satz by Id" query = "SELECT OBJECT(p) FROM TabMitarbeiter AS p WHERE p.id>?1 ORDER BY p.id ASC LIMIT 1"
 *
```

Zur Sicherheit habe ich den SQL auch schon mal mit dem SQL-Browser ausgeführt und ich komme zu dem Ergebnis, welches ich haben möchte.

Wenn ich das "LIMIT 1" in der Finder weg lasse funktioniert das Deployen auch ohne Probleme nur nicht, wenn ich es wieder in die Finder einbinde.

Wenn ich dann deploye bekomme ich folgene Fehlermeldung:

```
11:05:45,156 INFO  [ProxyFactory] Unbind EJB Home 'MitarbeiterSession' from jndi 'MitarbeiterSession'
11:05:45,218 INFO  [EjbModule] Undeployed MitarbeiterSession
11:05:45,218 INFO  [ProxyFactory] Unbind EJB Home 'AnredeEntity' from jndi 'AnredeEntity'
11:05:45,218 INFO  [EjbModule] Undeployed AnredeEntity
11:05:45,218 INFO  [ProxyFactory] Unbind EJB Home 'MitarbeiterEntity' from jndi 'MitarbeiterEntity'
11:05:45,218 INFO  [EjbModule] Undeployed MitarbeiterEntity
11:05:45,484 INFO  [EjbModule] Deploying MitarbeiterEntity
11:05:45,500 INFO  [EjbModule] Deploying AnredeEntity
11:05:45,515 INFO  [EjbModule] Deploying MitarbeiterSession
11:05:45,953 ERROR [MitarbeiterEntity#findSatzbyId] Encountered "LIMIT" at line 1, column 75.
Was expecting one of:
    <EOF> 
    "," ...
    
org.jboss.ejb.plugins.cmp.ejbql.ParseException: Encountered "LIMIT" at line 1, column 75.
Was expecting one of:
    <EOF> 
    "," ...
    
	at org.jboss.ejb.plugins.cmp.ejbql.EJBQLParser.generateParseException(EJBQLParser.java:4360)
	at org.jboss.ejb.plugins.cmp.ejbql.EJBQLParser.jj_consume_token(EJBQLParser.java:4237)
	at org.jboss.ejb.plugins.cmp.ejbql.EJBQLParser.EJBQL(EJBQLParser.java:190)
	at org.jboss.ejb.plugins.cmp.ejbql.EJBQLParser.parse(EJBQLParser.java:65)
	at org.jboss.ejb.plugins.cmp.jdbc.JDBCEJBQLCompiler.compileEJBQL(JDBCEJBQLCompiler.java:168)
	at org.jboss.ejb.plugins.cmp.jdbc.JDBCEJBQLQuery.<init>(JDBCEJBQLQuery.java:58)
	at org.jboss.ejb.plugins.cmp.jdbc.JDBCCommandFactory.createEJBQLQuery(JDBCCommandFactory.java:75)
	at org.jboss.ejb.plugins.cmp.jdbc.JDBCQueryManager.start(JDBCQueryManager.java:286)
	at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.startStoreManager(JDBCStoreManager.java:505)
	at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.start(JDBCStoreManager.java:396)
	at org.jboss.ejb.plugins.CMPPersistenceManager.start(CMPPersistenceManager.java:172)
	at org.jboss.ejb.EjbModule.startService(EjbModule.java:414)
	at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
	at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
	at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
	at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
	at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
	at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
	at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
	at $Proxy0.start(Unknown Source)
	at org.jboss.system.ServiceController.start(ServiceController.java:417)
	at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
	at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
	at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
	at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
	at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
	at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
	at $Proxy31.start(Unknown Source)
	at org.jboss.ejb.EJBDeployer.start(EJBDeployer.java:662)
	at sun.reflect.GeneratedMethodAccessor121.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
	at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
	at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
	at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
	at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
	at org.jboss.mx.interceptor.DynamicInterceptor.invoke(DynamicInterceptor.java:97)
	at org.jboss.system.InterceptorServiceMBeanSupport.invokeNext(InterceptorServiceMBeanSupport.java:238)
	at org.jboss.ws.integration.jboss42.DeployerInterceptor.start(DeployerInterceptor.java:93)
	at org.jboss.deployment.SubDeployerInterceptorSupport$XMBeanInterceptor.start(SubDeployerInterceptorSupport.java:188)
	at org.jboss.deployment.SubDeployerInterceptor.invoke(SubDeployerInterceptor.java:95)
	at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
	at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
	at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
	at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
	at $Proxy32.start(Unknown Source)
	at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1025)
	at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819)
	at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)
	at sun.reflect.GeneratedMethodAccessor18.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
	at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
	at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
	at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
	at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
	at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
	at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
	at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
	at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
	at $Proxy9.deploy(Unknown Source)
	at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421)
	at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:610)
	at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:263)
	at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.loop(AbstractDeploymentScanner.java:274)
	at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.run(AbstractDeploymentScanner.java:225)
11:05:45,953 WARN  [ServiceController] Problem starting service jboss.j2ee:service=EjbModule,module=MyEJB2Project.jar
org.jboss.deployment.DeploymentException: Error compiling EJB-QL statement for EJB 'MitarbeiterEntity': SELECT OBJECT(p) FROM TabMitarbeiter AS p WHERE p.id>?1 ORDER BY p.id ASC LIMIT 1,5; - nested throwable: (org.jboss.ejb.plugins.cmp.ejbql.ParseException: Encountered "LIMIT" at line 1, column 75.
Was expecting one of:
    <EOF> 
    "," ...
    )
	at org.jboss.ejb.plugins.cmp.jdbc.JDBCEJBQLQuery.<init>(JDBCEJBQLQuery.java:67)
	at org.jboss.ejb.plugins.cmp.jdbc.JDBCCommandFactory.createEJBQLQuery(JDBCCommandFactory.java:75)
	at org.jboss.ejb.plugins.cmp.jdbc.JDBCQueryManager.start(JDBCQueryManager.java:286)
	at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.startStoreManager(JDBCStoreManager.java:505)
	at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.start(JDBCStoreManager.java:396)
	at org.jboss.ejb.plugins.CMPPersistenceManager.start(CMPPersistenceManager.java:172)
	at org.jboss.ejb.EjbModule.startService(EjbModule.java:414)
	at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
	at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
	at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
	at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
	at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
	at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
	at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
	at $Proxy0.start(Unknown Source)
	at org.jboss.system.ServiceController.start(ServiceController.java:417)
	at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
	at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
	at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
	at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
	at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
	at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
	at $Proxy31.start(Unknown Source)
	at org.jboss.ejb.EJBDeployer.start(EJBDeployer.java:662)
	at sun.reflect.GeneratedMethodAccessor121.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
	at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
	at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
	at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
	at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
	at org.jboss.mx.interceptor.DynamicInterceptor.invoke(DynamicInterceptor.java:97)
	at org.jboss.system.InterceptorServiceMBeanSupport.invokeNext(InterceptorServiceMBeanSupport.java:238)
	at org.jboss.ws.integration.jboss42.DeployerInterceptor.start(DeployerInterceptor.java:93)
	at org.jboss.deployment.SubDeployerInterceptorSupport$XMBeanInterceptor.start(SubDeployerInterceptorSupport.java:188)
	at org.jboss.deployment.SubDeployerInterceptor.invoke(SubDeployerInterceptor.java:95)
	at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
	at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
	at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
	at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
	at $Proxy32.start(Unknown Source)
	at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1025)
	at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819)
	at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)
	at sun.reflect.GeneratedMethodAccessor18.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
	at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
	at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
	at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
	at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
	at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
	at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
	at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
	at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
	at $Proxy9.deploy(Unknown Source)
	at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421)
	at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:610)
	at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:263)
	at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.loop(AbstractDeploymentScanner.java:274)
	at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.run(AbstractDeploymentScanner.java:225)
Caused by: org.jboss.ejb.plugins.cmp.ejbql.ParseException: Encountered "LIMIT" at line 1, column 75.
Was expecting one of:
    <EOF> 
    "," ...
    
	at org.jboss.ejb.plugins.cmp.ejbql.EJBQLParser.generateParseException(EJBQLParser.java:4360)
	at org.jboss.ejb.plugins.cmp.ejbql.EJBQLParser.jj_consume_token(EJBQLParser.java:4237)
	at org.jboss.ejb.plugins.cmp.ejbql.EJBQLParser.EJBQL(EJBQLParser.java:190)
	at org.jboss.ejb.plugins.cmp.ejbql.EJBQLParser.parse(EJBQLParser.java:65)
	at org.jboss.ejb.plugins.cmp.jdbc.JDBCEJBQLCompiler.compileEJBQL(JDBCEJBQLCompiler.java:168)
	at org.jboss.ejb.plugins.cmp.jdbc.JDBCEJBQLQuery.<init>(JDBCEJBQLQuery.java:58)
	... 70 more
11:05:45,953 INFO  [EJBDeployer] Deployed: file:/C:/Programme/jboss-4.2.1.GA/server/default/deploy/MyEJB2Project.jar
11:05:46,031 ERROR [URLDeploymentScanner] Incomplete Deployment listing:

--- MBeans waiting for other MBeans ---
ObjectName: jboss.j2ee:service=EjbModule,module=MyEJB2Project.jar
  State: FAILED
  Reason: org.jboss.deployment.DeploymentException: Error compiling EJB-QL statement for EJB 'MitarbeiterEntity': SELECT OBJECT(p) FROM TabMitarbeiter AS p WHERE p.id>?1 ORDER BY p.id ASC LIMIT 1,5; - nested throwable: (org.jboss.ejb.plugins.cmp.ejbql.ParseException: Encountered "LIMIT" at line 1, column 75.
Was expecting one of:
    <EOF> 
    "," ...
    )

--- MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM ---
ObjectName: jboss.j2ee:service=EjbModule,module=MyEJB2Project.jar
  State: FAILED
  Reason: org.jboss.deployment.DeploymentException: Error compiling EJB-QL statement for EJB 'MitarbeiterEntity': SELECT OBJECT(p) FROM TabMitarbeiter AS p WHERE p.id>?1 ORDER BY p.id ASC LIMIT 1,5; - nested throwable: (org.jboss.ejb.plugins.cmp.ejbql.ParseException: Encountered "LIMIT" at line 1, column 75.
Was expecting one of:
    <EOF> 
    "," ...
    )
```

Ich habe da jetzt schon ewig dran rumgebastelt aber ich bekomme es einfach nicht hin.
Vielleicht kann mir ja einer von Euch weiter helfen.
Würde mich freuen...

MfG


----------



## Guest (14. Nov 2007)

Es gibt kein LIMIT in EJB-QL. Wenn du schon JBoss 4.2.1 verwendest, warum setzt du nicht gleich 
JPA + Hibernate ein? So wie ich das sehe, machst du nichts mit Hibernate, dafür aber mit XDoclet 
und EJB 2.x. CMPs.

Falls das kein bestehendes Projekt ist, bei dem du den alten Standard nutzen muss, dann vergiss das
ganze schnell wieder und schreibe es mit JPA um. Es lohnt sich nicht mit dem alten EJB 2.x. neu 
anzufangen.


----------



## Bumbum564 (15. Nov 2007)

Ja es besteht leider schon ein Projekt mit EJB 2.x CMP und xDoclet...
Da ich später in das richtige Projekt einsteigen soll habe ich die Aufgabe erst einmal eine eingenes kleines Projekt zu machen.

Da ich leider keine andere Wahl habe als mit EJB 2.x zu arbeiten stellt sich mir nun die Frage, wie kann ich das mit dem LIMIT umgehen?
Wie macht man es denn dann, wenn EJB-QL kein LIMIT unterstüzt?!
Habe es auch schon mit OFFSET und LIMIT versucht aber ich glaube das kann EJB-QL auch net :-(


----------



## bronks (15. Nov 2007)

Bumbum564 hat gesagt.:
			
		

> ... LIMIT unterstüzt?! ...


Kannst Du uns bitte die Notwendigkeit des LIMIT für Dein Vorhaben erklären? Was willst Du damit sinvolles erreichen?


----------



## Guest (15. Nov 2007)

bronks hat gesagt.:
			
		

> Bumbum564 hat gesagt.:
> 
> 
> 
> ...


Gute Frage. Das LIMIT 1 ist etwas merkwürdig. Wenn er nur einen Datensatz haben möchte, dann muss entweder 
die Query eindeutiger sein, oder er liest nur einen Datensatz aus der Ergebnismenge. Die alten, guten CMPs  werden 
nicht direkt geladen, sondern hinterher (Lazy Loading; einstellbar), was auch die alte Problematik mit n + 1 Abfragen 
verursacht(e).


----------



## Bumbum564 (16. Nov 2007)

Das mit dem "LIMIT 1" war auch nur ein Beispiel...

Es geht darum, dass ich mir Auszüge aus einer Datenbank auslesen und diese in ein Grid laden möchte.
Da in der Datenbanktabelle, um die es geht, aber über 5Mio. Datensätze hat will ich mir natürlich nur eine bestimmte Menge anzeigen lassen... zB 30 (kommt auf die größe des Grids an).

Außerdem könnte ich mir mit "LIMIT 1" zB auch eine getNext(), getPrev() Methode basteln um Satz für Satz durch die Datenbanktabelle zu klickern.... (zB Stammdaten Formular).


----------



## maki (16. Nov 2007)

Sieh dir doch mal den ValueListHandler an: http://java.sun.com/blueprints/corej2eepatterns/Patterns/ValueListHandler.html


----------

