0

複合 ID を持つ別のクラスを参照するクラスがあります。

SingleIdClassMap(){
  Id(x=>x.Id);
  References(x=>CompositeIdClass);
}

CompositeIdClass(){
  CompositeId().KeyReference(x => x.SingleIdClass).KeyReference(x => x.DynamicProperty);
}

SingleIdClassMapには に関する情報がないため、これはコンパイルされませんDynamicProperty。これを実行時に別のクラスからロードしたい:

PropertyClass.Singleton.GetCurrentProperty();

から複合キーの 2 番目の部分の値を取得できることを Hibernate に伝える方法はありますPropertyClass.GetCurrentProperty()か?

4

1 に答える 1

0

IMOフィルターが最も簡単です

EntityMap()
{
    Id(x => x.Id);
    HasMany(x => Texts)
        .KeyColumn("entity_id")
        .ApplyFilter("languageFilter", "language_id = :lid");
}

EntityTextClass()
{
    CompositeId()
        .KeyReference(x => x.Entity, "entity_id")
        .KeyProperty(x => x.LanguageId);
}

// at beginning of request
session.EnableFilter("languageFilter").SetParameter(":lid", languageId);

var entity = session.Query<Entity>().Fetch(e => e.Texts).First();
string text = entity.Texts.First();  // could be a seperate property

または、すべてのテキストが必要な場合 (例: ローカリゼーションのレビュー/編集時)

var entity = session.Query<Entity>().Fetch(e => e.Texts).First();
var allTexts = entity.Texts;
于 2013-04-18T06:29:04.930 に答える