現在、これに苦労しています。
抽象ドメイン クラスを使用して、汎用コードを使用して一般的に実行される操作を実行できるようにしたいと考えていました。
私の問題は、多くの GORM 操作がドメイン クラスの静的メソッドであることです。これが難しくなっています。「withTransaction」「findById」など、使用できるこれらのメソッドの非静的同等物があるかどうか疑問に思っていました。または、私が使用できる「グルーヴィーな魔法」があれば?
ところで、Grails 以外で GORM を使用しているため、「static transactional=true」サービス設定にアクセスできないと思います。
どんな助けでも大歓迎です。
抽象ドメイン クラス:
@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;
}
}
および具象クラスの例:
@Entity
@EqualsAndHashCode
class Person extends Entity<String> {
String name
String summary
LocalDate birthDate
LocalDate deathDate
String occupations
...
}
そして、いくつかのドメインオブジェクトで再利用できるようにしたいと思っていたいくつかの汎用コードですが、もちろん T.xxxx() 静的メソッドは機能しません。
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);
}
}
}
}