# Hibernate Criteria Restrictions.in("...","..") - Fehlender In- oder OUT-Parameter auf Index:: 1



## kotoko (9. Sep 2010)

Hallo,

ich mache eigentlich nichts großartiges. Erzeuge mir eine Liste von Rollen nach denen ich Benutzer filtern möchte und füge diese Liste dann der Restriction.in(...) beim Benutzer hinzu. Dabei stoße ich auf folgenden Fehler.

Vielen Dank für eure Hilfe.

Fehlermeldung:

```
JDBCExceptionReporter:77 - SQL Error: 17041, SQLState: 99999
JDBCExceptionReporter:78 - Fehlender IN- oder OUT-Parameter auf Index:: 1

org.hibernate.exception.GenericJDBCException: could not execute query
	at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	at org.hibernate.loader.Loader.doList(Loader.java:2220)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2108)
	at org.hibernate.loader.Loader.list(Loader.java:2103)
	at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1570)
	at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
```

Info: Die Klassen Benutzer und Role sind many to many verknüpft.
Der Fehler tritt in der Zeile 9 auf.

```
public List<Benutzer> getAllBenutzer() {
  List<Benutzer> tmpBenutzerList = null;
  List<Role> tmpRollen = null;
  ...
  try{
  ...
   tmpRollen = session.createCriteria(Role.class).add(Restrictions.eq("id", roleId)).list();
   ...
   tmpBenutzerList = session.createCriteria(Benutzer.class).add(Restrictions.in("rollen", tmpRollen)).list();
  } ...
```


----------



## Marcinek (11. Sep 2010)

Könnte die Liste der Rollen null sein? oder Leer?

Dann sagt er, dass zu dem Attribut rollen kein Parameter existiert.

Alternativ könnte rollen falsch gemappt sein


----------



## kotoko (13. Sep 2010)

> Könnte die Liste der Rollen null sein? oder Leer?
Nein, das habe ich bereits geprüft. Ich hole mir da eine Rolle über eine Konstante die definitiv existiert. Funktioniert auch.

```
tmpRollen = session.createCriteria(Role.class).add(Restrictions.eq("id", roleId)).list();
```

> Alternativ könnte rollen falsch gemappt sein 
Sonst wüsste ich nicht was falsch sein sollte. Da es sonst keine anderen Probleme mit dieser Beziehung gibt.


```
public class Benutzer{
    ...
    private List<Role> rollen = new ArrayList<Role>();
    ...
    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(name = "AUTHORITIES", joinColumns = {
        @JoinColumn(name = "USERID")}, inverseJoinColumns = {
        @JoinColumn(name = "ROLEID")})
    public List<Role> getRollen() {
        return rollen;
    }
```

> Dann sagt er, dass zu dem Attribut rollen kein Parameter existiert.
Wie das sein kann weiß ich derzeit auch nicht. Was meinst du könnte eine weitere Ursache sein?

Vielen Dank


----------



## Marcinek (13. Sep 2010)

Ich werde gleich nochmal schauen, ob dieses Mapping korrekt ist.

Könntest du noch schauen, was für ein SQL er generriert?

Dazu musst du sql_trace auf true stellen.

Gruß,

Marcinek


----------

