我正在使用jhipster v2。我有两个实体(父亲,女儿),父亲与女儿有一对多的关系,女儿与父亲有多对一的关系。 我刚刚对生成的java代码进行了一次修改:
当我得到所有的父亲时,在Java方面,我可以看到附属于父亲的Daughters系列,但是我无法在客户端(Anglarjs)方面看到该系列,父javascript对象没有&#39有一个女儿'属性。
这是正常的吗? 在服务器端:
@Entity
@Table(name = "T_CLIENT")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Client implements Serializable {
...
@OneToMany(mappedBy = "client", fetch = FetchType.EAGER)
@JsonIgnore
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Adresse> adresses = new HashSet<>();
@OneToOne
private Langue langue;
...
}
客户端(在我的angularjs控制器中):
$scope.clients = Client.query(function(){
$log.info($scope.clients);
});
在客户端,我可以看到&#39; langue&#39;客户的财产,但没有地址和#39;客户的财产。 我不明白为什么。
感谢您的回答。
答案 0 :(得分:3)
也许是因为@JsonIgnore
注释。如果您不使用DTO发送Client
,杰克逊将不会序列化和反序列化您的addresses
数据。
解决方案1:删除@JsonIgnore
注释。
解决方案2:创建一个像UserDTO
这样的DTO,然后使用它发送给您的客户。我可以建议你一个很棒的lib:MapStruct(http://mapstruct.org)。它将帮助您非常轻松地将User对象映射到UserDTO。它已经在最新版本的JHipster中使用。
解决方案3:如果由于@JsonIgnore
而不是问题,但更多关于使用hibernate获取数据的问题,您可以在此处找到答案:https://stackoverflow.com/a/19061378/4643869
答案 1 :(得分:2)
您也可以尝试
@JsonIgnoreProperties({"client"})
而不是@JsonIgnore,它会在向客户端发送jSON时完全忽略它。
答案 2 :(得分:0)
如果您想使用默认的jhipster代码,而不修改生成的后端并使获取保持延迟,那么在正面的父亲集合中,您必须迭代该集合并按ID查询每个父亲以获取新父亲带着所有女儿然后使用该数据进行所需的操作。希望您不需要那么多,如果需要,则在查询时需要使用分页。考虑用户体验,为什么用户需要这么多数据。