【问题标题】:java play framework order and limit by child field to jsonjava播放框架顺序和子字段限制为json
【发布时间】:2013-06-11 14:47:30
【问题描述】:

我有一个 Campaign 类、一个 Hotel 类和一个 Image 类。

一家酒店有许多图片和广告系列,但一个广告系列和图片只能有一个酒店。

我希望(使用 Play!Framework 2.x)选择前 5 个广告系列及其各自的酒店和图片,并将其放入一个漂亮的 JSON 中,就像 Json.toJson() 方法所做的那样。

我怎样才能做到这一点?我一直在寻找几个小时,看着 FetchType LAZY 和 EAGER 并尝试了各种东西,但我发现没有任何工作。我想做的最后一件事是手动循环和构建 JSON。

要生成一个按酒店排序的漂亮 JSON,我所做的只是从我的酒店模型Json.toJson(Hotel.all()); 中调用它,它将生成一个包含所有广告系列和图像的 JSON。

但我只想生成 5 个广告系列,并且我只想列出 5 个广告系列及其酒店及其图片。

谢谢!

【问题讨论】:

    标签: java sql json jpa playframework


    【解决方案1】:

    试试这个以获得 5 家酒店的列表: List<Hotel> hotelList = new Model.Finder(String.class, Hotel.class).setMaxRows(5).findList();

    【讨论】:

    • 你好 jlars62!这正是我现在一直在做的,但它的作用是它按酒店的 id 排序并列出该酒店的所有活动。我想做的是列出 5 个活动(按活动 ID 排序)及其各自的酒店和图像。
    • 你现在看到我的 JSON 看起来像这样 pastebin.com/PVQpWSLg 我希望它看起来像这样 pastebin.com/jmUer6Tm 你看到 id/order 切换的地方了吗?基本上我需要手动遍历所有活动,然后找到他们的酒店和图像并自己构建 JSON。但如果能像处理其他所有事情一样快速完成,那就太好了。
    • 好吧,我不是 sql 专家,所以可能有更有效的方法来做到这一点。但这应该适用于您正在尝试做的事情。使用此代码从广告系列中获取酒店:List<Hotel> hotelList = new ArrayList<>(); List<Campaign> campaignList = new Model.Finder(String.class, Campaign.class).setMaxRows(5).findList(); for(Campaign c :campaignList) { hotelList.add(c.hotel); }(续)
    • @OscarLinde 在您的酒店课程中,有这行 @OneToMany(cascade = CascadeType.ALL) public List<Campaign> campaign; 在您的活动课程中:@ManyToOne public Hotel hotel;
    • 这些行的作用是在 Hotel 和 Campaign 实体之间创建关系,以便 Campaign 实体知道它与哪个 Hotel 相关联。这是通过将 Hotel 主键 (id) 添加到 Campaign 表来完成的。此外,您可能希望将这些字段设为私有并添加 getter 和 setter。我刚刚使用了 public,所以我可以快速测试我发送给你的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 2012-07-23
    • 2013-03-05
    相关资源
    最近更新 更多