Obecnie walczymy z tym.Klasy domen abstrakcyjnych w GORM: jak radzić sobie ze statycznymi metodami GORM
Miałem nadzieję, że będę mógł użyć abstrakcyjnej klasy domeny, aby umożliwić mi użycie ogólnego kodu do wykonywania często wykonywanych operacji.
Mój problem polega na tym, że wiele operacji GORM to metody statyczne w klasie domeny, co utrudnia. Zastanawialiśmy się, czy istnieją niestatyczne odpowiedniki tych metod, np. "withTransaction" "findById" itp., z których mógłbym skorzystać. A może jest jakaś "groźna magia", której mógłbym użyć?
BTW, używam GORM poza grails, więc nie sądzę, że mam dostęp do ustawienia "static transactional = true".
Każda pomoc zostanie doceniona.
klasa abstrakcyjna domeny:
@Entity
public abstract class Entity<K> {
public abstract String toNiceString();
public K id;
public K getId(){
return id;
}
public void setId(final K id){
this.id = id;
}
}
i przykład beton klasy:
@Entity
@EqualsAndHashCode
class Person extends Entity<String> {
String name
String summary
LocalDate birthDate
LocalDate deathDate
String occupations
...
}
a niektóre rodzajowy kod której Miałem nadzieję, aby móc ponownie użyć całej niektórych obiektów domeny, ale oczywiście Metody statyczne T.xxxx() nie będą działać.
public abstract class AbstractParser<T extends Entity> {
protected void parseAndSavePages(){
//Do some parsing
...
T.withTransaction {
if(T.findEntityById(entity.id)){
println "Already exists!";
} else {
entity.save(failOnError: true);
}
}
}
}
Awesome. Pracował uczta. Dzięki. – Ben