spring 数据原生查询 Lob 列的有趣错误
spring data native query interesting bug with Lob column
我有一个实体:
@Entity public class KnowledgeBase {
private Long id;
private String link;
private String content;
@Id
@SequenceGenerator(name = "knowledgebase_id_generator", sequenceName = "knowledgebase_id_sequence", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "knowledgebase_id_generator")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
我有一个 spring 数据存储库
@Repository public interface KnowledgeBaseRepository
extends AbstractRepository<KnowledgeBase, Long> {
@Query(value = "SELECT c.id as id,c.link as link, c.content as content"
+ " from knowledgebase c where content=?1", nativeQuery = true)
List<KnowledgeBase> findRelevantRecords(String searchString);
}
请注意
where content=?1
只是一个示例,其中子句因测试而异。
问题是如果我 运行 这个存储库方法,一切都很好,但内容列包含大量文本,我希望它被延迟加载。如果这样做,我会收到错误消息,指出 Long: '' 的值是错误的。所以我的实体是:
@Lob @Basic(fetch = LAZY) String content;
如果我删除它,一切都会好起来的。
如何防止每次都加载内容列并正确搜索 spring 数据存储库?
试试这个:
在您的实体中创建一个仅接受必填字段的构造函数
public class KnowledgeBase{
//default constructor
public KnowledgeBase(){}
public KnowledgeBase(Long id,String link){
this.id=id;
this.link=link;
}
}
并在存储库中的查询中使用此构造函数签名
@Query(value = "SELECT new #{#entityName} (c.id as id,c.link as link) from #{#entityName} c "
+ " from knowledgebase c where content=?1", nativeQuery = true)
List<KnowledgeBase> findRelevantRecordsWithoutContent(String searchString);
我有一个实体:
@Entity public class KnowledgeBase {
private Long id;
private String link;
private String content;
@Id
@SequenceGenerator(name = "knowledgebase_id_generator", sequenceName = "knowledgebase_id_sequence", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "knowledgebase_id_generator")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
我有一个 spring 数据存储库
@Repository public interface KnowledgeBaseRepository
extends AbstractRepository<KnowledgeBase, Long> {
@Query(value = "SELECT c.id as id,c.link as link, c.content as content"
+ " from knowledgebase c where content=?1", nativeQuery = true)
List<KnowledgeBase> findRelevantRecords(String searchString);
}
请注意
where content=?1
只是一个示例,其中子句因测试而异。
问题是如果我 运行 这个存储库方法,一切都很好,但内容列包含大量文本,我希望它被延迟加载。如果这样做,我会收到错误消息,指出 Long: '' 的值是错误的。所以我的实体是:
@Lob @Basic(fetch = LAZY) String content;
如果我删除它,一切都会好起来的。 如何防止每次都加载内容列并正确搜索 spring 数据存储库?
试试这个: 在您的实体中创建一个仅接受必填字段的构造函数
public class KnowledgeBase{
//default constructor
public KnowledgeBase(){}
public KnowledgeBase(Long id,String link){
this.id=id;
this.link=link;
}
}
并在存储库中的查询中使用此构造函数签名
@Query(value = "SELECT new #{#entityName} (c.id as id,c.link as link) from #{#entityName} c "
+ " from knowledgebase c where content=?1", nativeQuery = true)
List<KnowledgeBase> findRelevantRecordsWithoutContent(String searchString);