1

我有一个问题,我只是不知道如何解决它。我想在 JAVA 中建模一个结构,例如:CompaniesEventsLocations

  • 每个公司包括一个或多个位置,代表公司分支机构所在的位置
  • 每个事件还有一个发生事件的位置

这是代码:

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 中的外来事物,我必须在 Location 中添加一个 Company 实例变量:

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。您可以(至少)两种不同的方式来做到这一点。

  1. 正如您所提到的,您可以拥有Location一个Company字段。如果那里有一对一的关系,这将很好。如果您想拥有一个,并且"Pittsburgh" Location您希望两家公司都在匹兹堡设有办事处,那将是行不通的。"Alcoa""US Steel"

  2. 实现它的第二种方法是拥有一个CompanyLocation在 ORM 语言中通常称为连接表的实体。然而,ORMLite 不会为您制作此连接表。

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

    所以如果想要"Alcoa"一个你需要在定义关系的表中Location插入一个。"Pittsburgh"CompanyLocation

希望这可以帮助。

于 2012-06-21T18:03:26.383 回答