gpt4 book ai didi

java - "could not initialize a collection"+ @Lob + MSSQL

转载 作者:行者123 更新时间:2023-11-30 05:10:27 24 4
gpt4 key购买 nike

在 n 到 m 关系中使用 Blob 字段时,HibernateMSSQL 由于某种原因会失败。

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]

我的类(class)如下所示:

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

@Entity
class Document {
@Id
public long id;

@Lob
public byte[] data;
}

对此有什么想法吗?我已经尝试使用 SetDocument[] 来避免错误。看来 Hibernate 总是在我的表上尝试不同的 SELECT。我该如何解决这个问题?

[1] MSSQL error codes

最佳答案

发布执行的查询和表会很有趣。但我能想到的两个映射(单向一对多与双向)之间的一个区别是它们在数据库级别的表示方式。

默认情况下,单向一对多将使用连接表:

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>();
}

我会尝试上面的方法。

引用文献

关于java - "could not initialize a collection"+ @Lob + MSSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3584812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com