0

これが私の Fluent 構成の問題なのか、それとも私の思考のロジックの問題なのかはわかりません。

基本的に、Author と Borrower という 2 つの継承クラスを持つ Person クラスがあります (これはライブラリ システムです)。私が持っているマッピングはです。

public class PersonMap : ClassMap<Person>
{
    public PersonMap()
    {
        Id(x => x.Id, "id");
        Map(x => x.Name, "name");

        // Subclasses
        AddPart(new AuthorMap());
        AddPart(new BorrowerMap());
    }
}

public class AuthorMap : JoinedSubClassPart<Author>
{
    public AuthorMap() : base("person_id")
    {
        Map(x => x.Country, "country");
        HasMany(x => x.Books).Cascade.All().WithKeyColumn("book_id"); 
    }
}

public class BorrowerMap : JoinedSubClassPart<Borrower>
{
    public BorrowerMap() : base("person_id")
    {
        Map(x => x.UserName, "user_name");
        HasMany(x => x.Schedule).Cascade.SaveUpdate().WithKeyColumn("borrower_id");
    }
}

ここで、HQL「FROM Author a ORDER BY a.Name」を実行すると、すべての Author エンティティと Borrower エンティティのリストが返されますが、明らかに著者のリストが必要なだけです。これについて私をまっすぐに設定してください。

4

1 に答える 1

0

試すべきいくつかのこと:

  • 各サブクラスマップで、テーブル名を次のように設定しますWithTableName("Author")
  • person_id各サブクラステーブルのキー列はありますか?そうでない場合は、に変更base("person_id")しますbase("key column name")

たとえば、次のマッピングを使用して非常によく似たクエリをテストしました。

public class DigitalFreeSubscriptionMap : JoinedSubClassPart<DigitalFreeSubscription>
{
    public DigitalFreeSubscriptionMap()
        : base("DigitalFreeSubscriptions")
    {
        WithTableName("DigitalFreeSubscriptions");
        ...

public class FreeSubscriptionMap : JoinedSubClassPart<FreeSubscription>
{
    public FreeSubscriptionMap()
        : base("FreeSubscriptions")
    {
        WithTableName("FreeSubscriptions");
        ...

どちらものサブクラスですSubscription。私がテストしたデータベースには、1700のDigitalFreeSubscriptionsがあり、100万を超えるFreeSubscripions(および他の種類のサブスクリプション)があります。HQLクエリ" FROM DigitalFreeSubscripion"は1700件の結果を返しました。

リクエストごとに、SubscriptionMapの上部:

public class SubscriptionMap : AuditableClassMap<Subscription>
{
    public SubscriptionMap()
    {
        WithTable("Subscriptions");
        Id(x => x.Id, "Subscriptions");

        AddPart(new FreeSubscriptionMap());
        AddPart(new DigitalFreeSubscriptionMap());
        // More sublass mappings and then the field mappings
于 2009-03-12T21:25:46.043 に答える