Коллекция сущностей ORMLite без ссылки

Я хочу добавить объект вложения, на который я буду ссылаться из нескольких разных объектов, но он не ссылается на них, как мне заставить это работать в ORMLite?

Я продолжаю получать это исключение:

 Caused by: java.sql.SQLException: Foreign collection class entity.Attachment for
    field 'attachments' column-name does not contain a foreign field named
    'attachmentId' of class enity.News

Например, у меня есть новостная сущность

@DatabaseTable
public class News extends Record {

    @DatabaseField(index = true, id = true)
    private long newsArticleId;
    @DatabaseField
    private String subject;
    @DatabaseField
    private String content;

    @ForeignCollectionField
    Collection<Attachment> attachments;
}

Сущность вложения:

@DatabaseTable
public class Attachment extends Record {

    @DatabaseField(id = true, index = true)
    private long attachmentId;

    @DatabaseField
    private String attachmentUrl;
}

Может ли кто-нибудь указать на меня, посмеяться и сказать мне, почему я делаю это неправильно и что я здесь неправильно понимаю. Спасибо.


person Mathijs Segers    schedule 23.01.2015    source источник


Ответы (1)


Это часто задаваемые вопросы. Цитата из документов ORMLite по зарубежным коллекциям:

Помните, что если у вас есть поле ForeignCollection, класс в коллекции должен (в этом примере Order) должен иметь внешнее поле для класса, в котором есть коллекция (в этом примере Account). Если Account имеет чужую коллекцию Orders, то Order должно иметь Account чужое поле. Это необходимо, чтобы ORMLite мог найти заказы, соответствующие определенной учетной записи.

В вашем примере, чтобы ORMLite определял, какие Attachment имеет конкретный объект News, объект Attachment должен иметь поле News. Другой способ — создать таблицу соединений, но ORMLite не сделает этого за вас.

person Gray    schedule 24.01.2015
comment
Хорошо, так что мне просто нужно сделать таблицу соединений. Я сделаю это, я надеялся, что сзади будут созданы скрытые таблицы. Спасибо за ваш ответ. - person Mathijs Segers; 25.01.2015