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 различными способами.
Как вы упомянули, вы можете иметь
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
в таблицу, которая определяет отношения.
Надеюсь это поможет.