I have following class:
public class MyData implements Serializable {
private Long id;
private Long number;
private Long category;
private String text;
// + getters and setters
}
The id property is mapped as ID in the mapping file (native generator).
I would additionally set number property using some generator, which value must be unique for particular category value. What is the best design pattern?
I was thinking about creating new persistent class NumberGenerator:
public class NumberGenerator implements Serializable {
private Long id;
private Long category; // unique="true" in the hbm.xml
private Long currentValue;
// + getters and setters
}
and provide NumberGeneratorService working this way:
...
public Long generateNewNumberForCategory(Long category) {
Iterator ngIt = = session.iterate("from NumberGenerator ng where category = " + category)
NumberGenerator ng = null;
if (ngIt.hasNext()) {
ng = (NumberGenerator) ngIt.next();
} else {
ng = new NumberGenerator();
ng.setCategory(category);
ng.setCurrentValue(1);
session.save(ng);
}
return ng.getCurrentValue();
}
Or, I was thinking about creating composite primary key and create own IdentityGenerator or use Interceptor for generating its number value.
Is there better solution for these?
_________________ Piotr Bzdyl
|