ich habe 2 Tabellen die über eine 1:n Verbindung verknüpft sind.
So habe ich die Bean aufgebaut:
private int ID = 0;
private String filmname = "";
private String filmlaenge = "";
private String sprache = "";
private Collection Autoren = "";
Mein Problem ist, wie ich den Select aufbaue, und die Bean fülle? Kann man solch eine Abfrage in einem einzigen (performanten) Select ausführen? Wie fülle ich dann die Bean?
Ich würde folgendes machen:
Erste einen Select auf Tabelle1. Somit habe ich die ID.
Jetzt die Bean füllen (nur die Strings - natürlich nicht die Collection)
Dann einen Select auf Tabelle2 mit der ID. Somit habe ich die Collection Autoren.
Jetzt die Collection füllen
Oder wie macht man sonst? Stehe irgendwie total auf den Schlauch. Oder ist das OK, wie ich das machen?
SELECT f.id as FilmId
,f.filmname
,f.filmlaenge
,f.sprache
,a.id as AutorId
,a.name as AutorName
FROM Film f
LEFT JOIN Autor a ON a.filmId = f.id
ORDER BY f.id
Code:
ResultSet rs = stmt.executeQuery(...);
List<Film> filmList = new LinkedList<Film>();
Film lastFilm = null;
while(rs.next()) {
Long filmId = rs.getLong("FilmId");
if(lastFilm == null || !lastFilm.getId().equals(filmId)) {
lastFilm = new Film();
lastFilm.setId(filmId);
lastFilm.setFilmname(rs.getString("filmname"));
lastFilm.setFilmlaenge(rs.getString("filmlaenge"));
lastFilm.setSprache(rs.getString("filmlaenge"));
filmList.add(lastFilm);
}
Autor autor = new Autor();
autor.setId(rs.getString("AutorId"));
autor.setName(rs.getString("AutorName"));
lastFilm.addAutor(autor);
}
es wäre zu schön gewesen... doch leider macht es nicht ganz genau das, was ich möchte.
Wenn bei diesem SELECT keine treffer in der Tabelle "Autor" gefunden werden, dann ist das recordset leer, obwohl es einen Treffer in der Tabelle Film gibt. Ich möchte den filmname, filmlaenge... aber auf jedenfall haben.
Code:
SELECT f.id as FilmId
,f.filmname
,f.filmlaenge
,f.sprache
,a.id as AutorId
,a.name as AutorName
FROM Film f
LEFT JOIN Autor a ON a.filmId = f.id
WHERE f.id = '6'
ORDER BY f.id
Probiere ich einen RIGHT-JOIN, dann wird nichts angezeigt, da es ja keinen Treffer in der Tabelle "Autor" gibt.
Übrigens, deine Beziehung zwischen Film und Autor ist merkwürdig. Sollte eine m:n Beziehung sein. Mehrere Autoren pro Film und mehrere Filme pro Autor sollten möglich sein. Auf keinen Fall filmId in Tabelle Autor.
Schön das du es hinbekommen hast aber ich kann dir nur trotzdem nochmal empfehlen dich mit bestehenden Persistenz-Frameworks auseinander zu setzen. Die nehmen einem eine ganze Menge Arbeit ab (unter anderem genau dein Problem) und sind einfach per jar in die Anwendung zu integrieren. Also warum das Rad neu erfinden?