Yep.tracer hat geschrieben:Oder hab ich was an den Augen? *g*
MFG,
speedy
Yep.tracer hat geschrieben:Oder hab ich was an den Augen? *g*
Also - es gibt zwei Methoden - eine fügt alle Insert's in den Batch, die nächste danach alle Updates. Jetzt hab ich also einen Insert eingefügt und gedacht die Update-Methode macht nichts, weil die Flags ja eigentlich so gesetzt sind, daß die gar nicht auf die Idee kommen könnte auch noch nen Update einzufügen - denkste - die hat die ganze Zeit auch immer noch nen Update für die AutoIncrement-Spalte eingefügt - und da man ja eine AutoIncrement-Spalte nicht updaten darf, kam dann der Fehler.tracer hat geschrieben:Versuch es noch mal in einfach zu erklären

Ah, OK.speedy hat geschrieben:Yep.... stell dir vor das "IDENTITY" heißt woanders "AUTOINCREMENT" ... die (1,1) bedeutet einmal der Startwert und dann um wieviel in jeder Zeile hochgezählt werden soll. Interessanter Weise - wenn ich den Typ der Spalte abfrage, dann steht da als Typ nicht einfach "INT" drin sondern "INT IDENTITY".
Das habe ich jetzt auch verstandenspeedy hat geschrieben:Also - es gibt zwei Methoden - eine fügt alle Insert's in den Batch, die nächste danach alle Updates. Jetzt hab ich also einen Insert eingefügt und gedacht die Update-Methode macht nichts, weil die Flags ja eigentlich so gesetzt sind, daß die gar nicht auf die Idee kommen könnte auch noch nen Update einzufügen - denkste - die hat die ganze Zeit auch immer noch nen Update für die AutoIncrement-Spalte eingefügt - und da man ja eine AutoIncrement-Spalte nicht updaten darf, kam dann der Fehler.
Code: Alles auswählen
class Sache {
enum Type { Hemd, Hose }
static void registerPropertyProvider(PropertyProvider p) { /* ... */ }
public Object getProperty(String name) {
// registrierte Provider der Reihe nach dem Property fragen
// ...
}
Type getType() { /* ... */ }
}
interface PropertyProvider {
Object getProperty(Sache sache, String name);
}
class PropertyProviderImpl implements PropertyProvider {
public Object getProperty(Sache sache, String name) {
if (sache.getType() == Sache.Type.Hose) {
if (name.equals("länge")) return new Integer(4711);
}
return null;
}
}Nunja, genau haben die mir natürlich nicht alles erzählt, was da alles in den Klassen gemacht wird. Aber das war wohl so, daß die es selber seinerzeit mal total genial und sinnvoll fanden bei der Entwicklung, aber ein außenstehender damit wohl überhaupt nicht klar kommt - man halt das Know How der Erstentwicklung benötigt, um damit klar zu kommen.duke08 hat geschrieben:Dass einer eine "sinnvolle" Vererbungshierarchie
Naja - wenn du da jetzt an der Klasse Sachen was änderst, dann mußt du es in allen anderen abgeleiteten Klassen eventuell auch nachziehen - und das kostet Zeit.duke08 hat geschrieben:Verwaltungsaufwand
Yep, so in der Art hatte ich mir das auch gedacht.duke08 hat geschrieben:Eine ganz einfache Möglichkeit wäre z.B. das hier: