# kleine verwirrung wegen auto_increment und applikation



## continue (9. Mrz 2010)

Hallo,

Ich schreibe gerade eine kleine Anwendun mit Datenbankanbindung. In meinen Tabellen gibt es je ein Attribut ID Integer welches ich auf auto increment gestellt habe.
Nun stellt sich mir eine frage:
In meiner Anwendung existieren für meine Entities je eine Bean mit den entsprechenden Attributen.
Ich weiß nicht ob ich in den Beans auch das ID Attribut mit reinnehmen soll, weil das wird ja (etwa beim einfügen eines neuen Datensatz) sowieso von der Datenbank via Auto_increment gewählt.....Ist es üblich das ID attribut auch in den Beans zu halten? Beim einfügen eines Datensatzes setze ich die Id sowieso nicht selbst und wenn der datensatz dann eingefügt ist müsste ich den aktuellen ID Wert wieder aus der db lesen und in der bean setzen..... :bahnhof:

grüße


----------



## mvitz (9. Mrz 2010)

Die ID definiert ja idr. die eindeutige Identität für dieses Objekt. Dementsprechend gehört diese auch idr. in deine Java Objekte. Aufgrund der ID kannst du anschließend auch deine equals und hashCode Methoden implementieren.


----------



## continue (10. Mrz 2010)

danke,
aber wie bekommt das objekt die id? wenns in die datenbank eingefügt wird? 
schau ich dann zuerst wie hoch die größte id ist in der DB?  und der nächste eingefügte wert wäre dann der nächste (größterWert+1), wegen dem autoincrement...?
oder speichere ich den eintrag zuerst in der DB und hole mir danach die zugewiesene id?


----------



## mvitz (10. Mrz 2010)

Einfach weiter AutoIncrement benutzen und die ID anschließend setzen (Dafür musst du idr. Long benutzen, damit der Wert zu Anfang null sein kann.).

Ich verweise mal auf folgende Quelle: JDBC Schlüssel Generierung / Heiner Kücker
Idr. ist dein JDBC Treiber >= Version 3.


----------



## continue (12. Mrz 2010)

Bin da noch immer etwas verwirrt was die Id angeht....
Wenn ich nun eine "search" funktion für meine Datenbank implementieren will:
Angenommen es geht beispielsweise um eine Bücher datenbank. Buch wird in der Applikation mit der Bean Book.java repräsentiert.....
in der Datenbank haben wir gewisse attribute vom buch wie preis, seitenanzahl.. und einen auto-increment id.
Die java Bean besitzt auch eine Variable id.

Wenn ich nun nach einem Buch suchen will (void search(Book b)) dann füll ich das buch mit information:
b.setPrice(....), b.setSeitenanzahl(...) was mach ich aber mit id? auf was setzt man das?? einfach auf null? ich erstelle das objekt b ja nur um es dem dafür zuständigen dao objekt zu übergeben welches dann in der db sucht....
das mit dem null setzen kommt mir aber nicht schön vor....

hoff ich konnte mein problem verständlich schildern....


----------



## mvitz (13. Mrz 2010)

Idealerweise gibt es dann Funktionen wie List<Book> searchBookByName(String name), List<Book> searchBookByAuthor(String author) denen man kein Buch übergeben muss. Solltest du tatsächlich ein Buch übergeben wollen. Dann muss wohl die ID null sein. Dann könntest du sogar sagen, dass alle Felder die gesetzt sind in die Suche übernommen werden und alle die null sind ausgeschlossen werden. Nach dem Motto

List<Book> findBooksLike(Book book)


----------



## tfa (13. Mrz 2010)

Also die ID brauchst du schon. Vielleichst willst du ja mal ein bestimmtes Buch finden gemäß ID. Oder an den Büchern hängen noch irgendwelche komplexen Attribute dran, die über einen Fremdschlüssel zugeordnet werden - was ja praktisch auch die ID ist.
Wenn du nur JDBC benutzt, könnte diese Methode helfen: getGeneratedKeys()

Am besten lässt du diesen ganzen Kleinkram aber durch ein Pesistenz-Framework (z.B. Hibernate) regeln. Dann musst du dich darum nicht kümmern.


----------

