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:
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:
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: