我正在使用PagingAndSortingRepository
处理API我试图从存储库中获取关联的列表。这曾经工作但突然停止在这里是我的设置;
@RequestMapping(value = "products/imported", produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody Iterable<AmazonProduct> importedProducts (...) throws EncoderException, RestClientException {
...
return this.AmazonProductRepository.findAll();
}
这是我尝试通过json返回的Product类;
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@Entity
@TypeDefs({
@TypeDef(name = "json", typeClass = MyJsonType.class),
@TypeDef(name = "featuresJson", typeClass = productFeaturesJsonType.class),
})
public class AmazonProduct {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "brandId")
@JsonManagedReference
private AmazonBrand brand;
public AmazonBrand getBrand() {
return brand;
}
public void setBrand(AmazonBrand brand) {
this.brand = brand;
}
}
这是品牌关系;
@Entity
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
public class AmazonBrand {
...
@JsonBackReference
@OneToMany(mappedBy="brand", fetch = FetchType.LAZY)
private List<AmazonProduct> products;
public List<AmazonProduct> getProducts() {
return products;
}
public void setProducts(List<AmazonProduct> products) {
this.products = products;
}
}
当我通过浏览器运行时,我得到了;
[ {
"publisherId" : null,
"legalDisclaimer" : null,
"asin" : "B00KSF9RAG",
"title" : "Eye Mask / Sleep Mask - Sleeping Masks for...",
"features" : {
"features" : [ "...", "...", "..." ]
}
}]
我希望这附属于该物业; amazonBrand。它曾经工作,但它目前无效。
我的存储库类看起来像这样;
public interface AmazonProductRepository extends PagingAndSortingRepository<AmazonProduct, Long> {
}
答案 0 :(得分:0)
根据数据库依赖关系,您可能需要将注释放在“getters”而不是私有字段上。使用Hibernate和MySql时遇到了类似的问题。
答案 1 :(得分:0)
尝试在您的实体类上使用@Cacheable(false)
答案 2 :(得分:0)
JsonBackReference的文档说:
用于指示关联属性是的一部分的注释 领域之间的双向联系;并且其角色是“孩子”(或 “后退”)链接。该属性的值类型必须是Bean:不能是 集合,映射,数组或枚举。链接被处理为 用该注释注释的属性未序列化;和 反序列化期间,其值设置为具有 “托管”(转发)链接。
您会看到您不能将集合与@JsonBackReference
一起使用,而必须是一个bean。
因此,以下行不起作用:
@JsonBackReference
@OneToMany(mappedBy="brand", fetch = FetchType.LAZY)
private List<AmazonProduct> products;
我能够获得一些条目,并且在两个类上都删除了注释。