ORMLite ForeignCollections

У меня есть проблема, и я просто не знаю, как ее решить. Я хочу смоделировать в JAVA такую ​​структуру, как: компании, события и места.

  • Каждая компания включает одно или несколько местоположений, которые представляют места, где находится филиал компании.
  • Каждое событие также имеет место, где происходит событие

Вот код:

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;
  ...
}

Но теперь место не работает для событий!?! Как я могу реализовать такое поведение?

Спасибо за ответ

1 ответ

Решение

Каким-то образом вам нужно назначить "владение" Location по Company, Вы можете сделать это (по крайней мере) 2 различными способами.

  1. Как вы упомянули, вы можете иметь Location имеет Company поле. Это было бы хорошо, если бы там были отношения один к одному. Это не будет работать, если вы пытаетесь иметь один "Pittsburgh"Location и вы хотите оба "Alcoa" а также "US Steel" компании, расположенные в Питтсбурге.

  2. 2-й способ реализовать это иметь CompanyLocation сущность, которая часто называется таблицей соединений на языках ORM. Однако ORMLite не создает эту таблицу соединений для вас.

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

    Так что если хотите "Alcoa" иметь Location из "Pittsburgh" вам нужно вставить CompanyLocation в таблицу, которая определяет отношения.

Надеюсь это поможет.

Другие вопросы по тегам