ThirdKeeper
Mitglied
Hallo zusammen,
Ziel:
Erzeugung einer eigens generierten Id, die 2-stellig für Jahr + 5-stellig für laufende Nr. aufgebaut sein soll.
Beispiel:
Eine EJB namens Rechnung wird z.B. Als erstes Rechnungsdokument des aktuellen Jahunderts am 01.01.2008
in der DB erstellt. Jetzt soll der Primary key so aussehen: "0800001" so dass man z.B. später auf einer Rechnung
die Daten wie folgt ausgeben kann: "RG 08 - 00001".
Die 5te Rechnung am 02.01.09 sollte den key 0900005 für die DB erzeugen.
Allgemeine Problematik:
Wie bekommt man es hin, dass EJB's einen Schlüsselgenerator verwenden der:
a) eine vorangestellte beliebige Zahlenkombination mit einem angehangenen autowert verwendet und
b) den Autowert zu beginn eines neuen Jahres wieder auf 0 oder einen anderen beliebigen Wert setzt?
Verwendete Tools & Frameworks:
JBoss 4, Eclipse 3.3.0, JPA (EJB3 - JEE5), MySQL 5
Ansatz:
Erzeugung einer eigens generierten Id, die 2-stellig für Jahr + 5-stellig für laufende Nr. aufgebaut sein soll.

Eine EJB namens Rechnung wird z.B. Als erstes Rechnungsdokument des aktuellen Jahunderts am 01.01.2008
in der DB erstellt. Jetzt soll der Primary key so aussehen: "0800001" so dass man z.B. später auf einer Rechnung
die Daten wie folgt ausgeben kann: "RG 08 - 00001".
Die 5te Rechnung am 02.01.09 sollte den key 0900005 für die DB erzeugen.

Wie bekommt man es hin, dass EJB's einen Schlüsselgenerator verwenden der:
a) eine vorangestellte beliebige Zahlenkombination mit einem angehangenen autowert verwendet und
b) den Autowert zu beginn eines neuen Jahres wieder auf 0 oder einen anderen beliebigen Wert setzt?
Verwendete Tools & Frameworks:
JBoss 4, Eclipse 3.3.0, JPA (EJB3 - JEE5), MySQL 5

Code:
public class DocumentIdGenerator
implements Serializable{
private static long currentId=0;
private long id = 0;
public DocumentIdGenerator (){
this.id = getNextID();
}
public long getId(){
return id;
}
public void setId(long id){
this.id = id;
}
public static long getCurrentId(){
return currentId;
}
public static void setCurrentId(long id){
currentId = id;
}
public synchronized long getNextID(){
currentId++;
if(currentId < (cutYear(getActialYear())*100000))
currentId = cutYear(getActialYear())*100000 + 1;
return currentId;
}
public static short getActialYear() {
return (short)cutYear(Calendar.getInstance(Locale.GERMANY).get(Calendar.YEAR));
}
public static short cutYear(int year){
return (short)(year-=((year/100)*100));
}
}
Zuletzt bearbeitet: