1

そのため、2 つのドメインが単一のドメインから継承できるようにしようとしています。

abstract class Pet {
    Nose nose
    static hasMany = [legs: Leg]
}

class Dog extends Pet {
    static hasMany = [friends: Friend]
}

そして、私はエラーが発生しています:

Caused by: org.codehaus.groovy.grails.exceptions.InvalidPropertyException: No property found for name [legs] for class [class animals.Dog]

何か案は?hasManys を組み合わせるために何かしなければならないことはありますか?

4

2 に答える 2

0

問題を再現しようとしましたが、 は得られませんでしたInvalidPropertyExceptionが、生成されたデータベース スキーマには と の間の 1:m 関係がDogありませんでしたLeg

問題はPet抽象クラスであることに関連していると思います。DogクラスSet legsが から継承する場合、インスタンスをデータベースにPet永続化するには、基になるテーブルに** の外部キーが必要です。はクラスであるため、テーブルは作成されないため、列は作成されません。したがって、依存クラス に外部キーを作成することはできません。 LegLegpet_idPetabstractidLeg

クラスを具象Petクラスにする (移動してキーワードgrails-app/domainを削除する) とは、フィールドをabstract持つテーブルが作成されることを意味します。idまた、Legテーブルでは、pet_idHibernate がSet legs.

** (または、 などの連想エンティティ テーブルにpet_legsは外部キーが必要です)

ただし、Petクラスを具象化すると、のすべてのサブクラスがPetそのテーブルに格納されるため、各サブクラスに独自のテーブルを持たせたい場合は、次を追加できます。

  static mapping = {
    tablePerHierarchy false
  }

Dogクラスに、、、などのテーブルを db に作成しPetますDog

于 2013-09-27T17:06:25.673 に答える