1

問題があり、解決方法がわかりません。私はJAVAで、 CompaniesEventsLocationsのような構造をモデル化したいと思います。

  • 各会社には、会社の支店がある場所を表す1つまたは複数の場所が含まれます
  • 各イベントには、イベントが行われる場所もあります

コードは次のとおりです。

public class Event {
    int id;
    String name;
    Location location;
    ...
}

public class Location {
    int id;
    String name;
    String building;
    ...
}

public class Company {
    int id;
    String name;
    Collection<Location> locations;
    ...
}

私の問題は、データベースにオブジェクトを保存するためにORMLiteを使用したいということです。しかし、ORMLiteの異質なことを正しく理解した場合は、Companyインスタンス変数をLocationに追加する必要があります。

public class Location {
  @DatabaseField(columnName = "com_id", foreign = true)
  Company company;
  @DatabaseField(id = true, columnName = "loc_id")
  int id;
  @DatabaseField(columnName = "loc_name")
  String name;
  @DatabaseField(columnName = "loc_build")
  String building;
  ...
}

public class Company {
  @DatabaseField(columnName = "com_id")
  int id;
  @DatabaseField(columnName = "com_name")
  String name;
  @ForeignCollectionField()
  Collection<Location> locations;
  ...
}

しかし、現在、場所はイベントでは機能しません!?!どうすればそのような動作を実装できますか?

ご回答ありがとうございます

4

1 に答える 1

0

Locationどういうわけか、 aによって aの「所有権」を割り当てる必要がありますCompany。これは、(少なくとも) 2 つの異なる方法で行うことができます。

  1. あなたが述べたように、Locationhas aCompanyフィールドを持つことができます。そこに1対1の関係があれば、これはうまくいくでしょう。1つを取得しようとしていて"Pittsburgh" Location、両方"Alcoa""US Steel"会社がピッツバーグにある場合、それは機能しません.

  2. それを実装する2番目の方法はCompanyLocation、ORM言語で結合テーブルと呼ばれることが多いエンティティを持つことです。ただし、ORMLite はこの結合テーブルを作成しません。

    public class CompanyLocation {
       @DatabaseField(foreign = true)
       Company company;
       @DatabaseField(foreign = true)
       Location location;
    }
    

    したがって"Alcoa"Locationofが必要な場合は、関係を定義するテーブルに"Pittsburgh"a を挿入する必要があります。CompanyLocation

お役に立てれば。

于 2012-06-21T18:03:26.383 に答える