ヒップホップの対象との関係の設計を求めます。


今TbFinancialのVOがあります。入金して帳簿を出す記録があります。

class TbFinancial
{
  Integer id ,fk_id;
  String type ;
  Float number;  //           
}
TbSaleがあります。店頭販売の記録があります。

class TbSale
{
  Integer id;
  TbProduct product;
  TbClient client;
  Float productAmount;
  Float totalPaid;
}
表の関係から言えば、financial表はtypeとfk_を通ります。IDフィールドは、saleテーブルのある記録に関連しています。それによって入金または出金の目的を計算します。sqlは以下の通りです。

select fk_id,type from financial f where type='    ' left outter join (select * from sales s) where f.fk_id=s.id
もしfinancial表が返品記録表refundに関連しているなら、sqlはこのようなものです。

select fk_id,type from financial f where type='    ' left outter join (select * from refund r) where f.fk_id=r.id
このようにtypeとfk_を通ります。IDは他の表と接続すると、financial表の汎用性が保証されますが、sqlを使うと簡単に解決できます。Hibernateの対象になると、二つの問題が発生します。
1 TbFinancialオブジェクトの属性には、他のテーブルのVOが含まれているはずですが、このVOのタイプは不確定です。TbSaleかもしれません。TbRefundかもしれませんが、どのように構成されていますか?
2 TbFinancialオブジェクトと他のVOの関係は、one-to-manyではなく、many-to-oneでもなく、many-to-manyでもなく、one-to-oneですか?
このような問題は、ヒベルナの経験が豊富な友達に聞いてみてください。どう解決したらいいですか?ありがとうございます。