Jhipster - 一对多关系,在客户端看不到集合



我正在使用jhipster v2。我有两个实体(父亲、女儿),父亲与女儿有一对多关系,女儿与父亲有多对一关系。我刚刚对生成的java代码进行了一次修改:

  • 我已经将父女关系的获取类型配置为 EAGER。

当我得到所有的父亲时,在Java端我可以看到附加到父亲的女儿集合,但我看不到客户端(Anglarjs)端的集合,父亲javascript对象没有"女儿"属性。

正常吗?在服务器端:

@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);
                    });
在客户端,

我可以看到客户端的"语言"属性,但客户端中没有"地址"属性。我不明白为什么。

感谢您的回答。

也许是由于注释@JsonIgnore。如果您不使用 DTO 发送Client,Jackson 将不会序列化和反序列化您的addresses数据。

解决方案 1:删除@JsonIgnore注释。

解决方案 2:创建一个类似 DTO UserDTO 并使用它来发送给您的客户端。我可以给你一个很棒的库:MapStruct(http://mapstruct.org)。它将帮助您非常轻松地将用户对象映射到用户DTO。它已经在最新版本的JHipster中使用。

解决方案3:如果这不是由于@JsonIgnore的问题,但更多关于使用hibernate获取数据的信息,您将在此处找到答案:https://stackoverflow.com/a/19061378/4643869

你也可以试试

 @JsonIgnoreProperties({"client"})

而不是@JsonIgnore,当它将 jSON 发送到客户端时,它将完全忽略它。

如果你想使用默认的jhipster代码,而不是修改生成的后端,让fetch懒惰,那么在前面的父亲集合中,你必须迭代该集合,并通过Id查询每个父亲,以获得加载所有女儿的新父亲。然后对这些数据做你想做的事。希望你不需要那么多,如果是这样,你需要在查询时使用分页。想想用户体验,为什么用户需要这么多数据。