«не удалось инициализировать коллекцию» + @Lob + MSSQL

При использовании BLOB-полей в n-m-отношениях Hibernate и MSSQL почему-то терпят неудачу.

SQL Error: 421, SQLState: S0001
The image data type cannot be selected as DISTINCT because it is not comparable.
...
could not initialize a collection: [Dataset.documents#someID]

Мои занятия выглядят следующим образом:

@Entity
class Dataset {
    @OneToMany(fetch = FetchType.LAZY)
    public List documents = new ArrayList();
}

@Entity
class Document {
    @Id
    public long id;

    @Lob
    public byte[] data;
}

Есть идеи по этому поводу? Я уже пытался использовать Set или Document [] , чтобы избежать ошибок. Кажется, что Hibernate всегда пытается различить SELECT на моих столах. Как это обойти?

[1] Коды ошибок MSSQL

1
задан Pascal Thivent 30 August 2010 в 08:01
поделиться

1 ответ

Было бы интересно выложить выполненные запросы и таблицы. Но одно различие, которое я могу придумать между двумя сопоставлениями (однонаправленное «один ко многим» и двунаправленное), заключается в том, как они представлены на уровне базы данных.

По умолчанию однонаправленный вариант «один ко многим» будет использовать таблицу соединений:

DATASET       DATASET_DOCUMENT       DOCUMENT
-------       ----------------       --------
ID            DATASET_ID             ID
              DOCUMENT_ID

В то время как двунаправленный будет использовать следующее представление:

DATASET       DOCUMENT  
-------       ----------
ID            ID        
              DATASET_ID

В JPA 2.0 теперь можно использовать однонаправленную ассоциацию без таблицы соединений (стандартным способом), указав @JoinColumn на стороне @OneToMany:

@Entity
class Dataset {
    @Id
    @Column(name="ID")
    public Long id;
    ...
    @OneToMany
    @JoinColumn(name="DATASET_ID", referencedColumnName="ID")
    public List<Document> documents = new ArrayList<Document>();
}

Я бы попробовал вышеперечисленное.

Ссылки

1
ответ дан 2 September 2019 в 21:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: