Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe ein ValueObject mit verschiedenen Werten: vorname, nachname, strasse, plz, etc... und dazu eine Klasse welche mir die Objekte aus einer DB holt. Wie kann ich es vermeiden für jedes Attribut meines ValueObjects eine Methode zu schreiben?
also auf jeden Fall könntest du jede Operation auf eine Zeile verkürzen:
Code:
listAdressesSQL("from Address where nachname = \'" + nachname + "\'");
der ganzen Rest steht in der EINEN Operation listAdressesSQL
--------
aber selbst bei nur einer Zeile pro Operation sind es immer noch n Operationen,
für so einen kleinen Bereich wird es sich kaum lohnen,
aber eine Möglichkeit:
Enums, int-Konstanten und/ oder String-Arrays:
Code:
public void listAddresses(Typ typ, String value) {
listAdressesSQL("from Address where "+field[typ]+" = \'" + value + "\'");
}
wobei der Code von listAdressesSQL dann auch wieder direkt in dieser Operation stehen könnte,
sofern nirgendwo anders gebraucht,
problematisch wirds, wenn du auch int-Felder hast, bei denen die einfachen Anführungszeichen stören würden,
entweder eine zweite Operation speziell für diese oder ein Array mit dieser Information pro Feld
oder ähnliches
wenn ueber jedes attribut (vorname, nachname, plz usw) eine Abfrage moeglich sein soll dann brauchst du auch fuer jedes eine Methode.
Ich wuerde das ueber eine Enum machen:
Code:
enum AdressFields {
vorname, nachname, plz, strasse; // usw
}
public void listAddress(AdressFields field, String value) {
Session mySession = HibernateUtil.getSessionFactory().openSession();
Transaction myTransaction = mySession.beginTransaction();
List result = mySession.createQuery("from Address where "+ field +" = \'" + value + "\'").list();
for (Iterator iter = result.iterator(); iter.hasNext(); ) {
Address loadedAdr = (Address) iter.next();
// wie die ausgabe von adress sein soll -> in die toString methode der Klasse
System.out.println(loadedAdr);
}
myTransaction.commit();
mySession.close();
}
oder eben modularer und fuer jedes Feld eine eigene Methode
Code:
privatevoid listAddress(String field, String value) {
Session mySession = HibernateUtil.getSessionFactory().openSession();
Transaction myTransaction = mySession.beginTransaction();
List result = mySession.createQuery("from Address where "+ field +" = \'" + value + "\'").list();
for (Iterator iter = result.iterator(); iter.hasNext(); ) {
Address loadedAdr = (Address) iter.next();
// wie die ausgabe von adress sein soll -> in die toString methode der Klasse
System.out.println(loadedAdr);
}
myTransaction.commit();
mySession.close();
}
public void listAddressByLastname(String value) {
listAddress("nachname", value);
}
// ... und die anderen methoden