2016-06-17 2 views
0

У меня есть два класса, User and Artwork. Пользователь может иметь коллекцию произведений искусства. Все работает так, как ожидалось, я могу хранить и извлекать объекты из db, но я не понимаю, как они сохраняются.Как ORMLite хранит ForeignCollections в базе данных?

public class User { 

    @DatabaseField(allowGeneratedIdInsert = true, generatedId = true, unique = true) 
    Long id; 

    @DatabaseField 
    String name; 

    @DatabaseField(columnName = "artwork_id", foreign = true, foreignAutoCreate = true, foreignAutoRefresh = true) 
    Artwork masterPiece; 

    @ForeignCollectionField(eager = true) 
    Collection<Artwork> artworks; 
} 

public class Artwork { 

    @DatabaseField(allowGeneratedIdInsert = true, generatedId = true, unique = true) 
    Long id; 

    @DatabaseField 
    String name; 

    @DatabaseField 
    String file; 

    @DatabaseField(columnName = "user_id", foreign = true, foreignAutoCreate = true, foreignAutoRefresh = true) 
    User owner; 
} 

Я создаю некоторые работы, добавляю их в коллекцию и устанавливаю коллекцию в Пользователь. При проверке .db (.schema) Я получаю это:

CREATE TABLE android_metadata (locale TEXT); 
CREATE TABLE `user` (`id` INTEGER PRIMARY KEY AUTOINCREMENT , `name` VARCHAR , `artwork_id` BIGINT); 
CREATE TABLE `artwork` (`id` INTEGER PRIMARY KEY AUTOINCREMENT , `name` VARCHAR , `file` VARCHAR , `user_id` BIGINT); 

Объекты быть правильно и запрашивая для них работает как шарм. Я действительно не понимаю, почему у меня нет поля для коллекции.

ответ

1

пользователя и Artwork сущности имеет один-ко-многим отношения. В реляционных базах данных это моделируется как Artwork, имеющий столбец, который ссылается на User (user_id, в данном случае). Для того, чтобы получить коллекцию Artwork, связанных с User (ID), ormlite выполняет запрос, который примерно выглядит следующим образом:

select * from Artwork where user_id = id

Смежные вопросы