При использовании 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 на моих столах. Как это обойти?
Было бы интересно выложить выполненные запросы и таблицы. Но одно различие, которое я могу придумать между двумя сопоставлениями (однонаправленное «один ко многим» и двунаправленное), заключается в том, как они представлены на уровне базы данных.
По умолчанию однонаправленный вариант «один ко многим» будет использовать таблицу соединений:
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>();
}
Я бы попробовал вышеперечисленное.