2012-06-21 2 views
1

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

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

Вот код:

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, я должен добавить переменную экземпляра компании в Адрес:

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

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

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

ответ

0

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

  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 в таблицу, которая определяет отношения.

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