【问题标题】:Jhipster - one to many relationship, can't see the collection on client sideJhipster - 一对多关系,在客户端看不到集合
【发布时间】:2015-01-23 13:56:37
【问题描述】:

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

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

当我获取所有父亲时,在 Java 端我可以看到附加到父亲的 Daughters 集合,但在客户端(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。它告诉 spring 不要编组该属性。

标签: java rest jpa one-to-many jhipster


【解决方案1】:

可能是因为@JsonIgnore 注释。如果您不使用 DTO 发送您的 Client,Jackson 将不会序列化和反序列化您的 addresses 数据。

解决方案一:去掉@JsonIgnore注解。

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

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

【讨论】:

    【解决方案2】:

    你也可以试试

     @JsonIgnoreProperties({"client"})
    

    而不是@JsonIgnore,它在向客户端发送json时会完全忽略它。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2015-07-16
        • 2015-03-27
        • 1970-01-01
        • 2016-06-29
        • 2012-07-31
        • 2015-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多