【问题标题】:Ebean not fetch oneToMany relationshipEbean 不获取 oneToMany 关系
【发布时间】:2019-12-26 16:11:53
【问题描述】:

我有一个 Post 实体,它具有带有以下代码的 testattribut 类型属性:

    @Entity
    public class Post extends Model {
    @Id
    private long id;
    @ManyToOne
    private PostType postType;
    @ManyToOne
    private User user;
    @ManyToOne
    private Category category;

    @OneToMany (cascade = CascadeType.PERSIST)
    private List<ImageLink> testattribut;
    private String description;
    private int likes;
    private int messages;
    private boolean liked;
    private boolean saved;
    private Date timesTamp;

    //getters and setters

    }

我尝试在传递一个 RawSql(其中我还获得其他属性)后获取属性 testattribut,如下面的代码所示

    public Result test(){

        long user_id = 1;

        String sql =
                "SELECT p.id, p.description, p.likes, p.times_tamp, u.id, " +
                "u.name, u.phone, u.profile_url, u.rate, u.rate_count, c.id, " +
                "EXISTS ( " +
                "SELECT * " +
                "FROM likes " +
                "WHERE p.id = likes.post_id " +
                "AND likes.user_id = "+user_id +
                ") AS liked "+
                "FROM post p " +
                "JOIN user_ u ON u.id = p.user_id "+
                "JOIN category c ON c.id = p.category_id";

        RawSql rawSql = RawSqlBuilder
                .parse(sql)
                .tableAliasMapping("u", "user")
                .columnMapping("c.id", "category.id")
                .create();


        List<TestEntity> data = TestEntity.finder
                .query()
                .setRawSql(rawSql)
                .fetch("testattribut.image", "url")
                .findList();


        return ok(Ebean.json().toJson(data));
    }

我的问题是当我使用 Ebean.json().tojson() 返回查询结果时,没有返回 testattribut 属性。 这是返回的结果:

{
    "id": 1,
    "user": {
        "id": 18,
        "name": "smozi_shop",
        "phone": "+22969298229",
        "profileUrl": null,
        "rate": 0.0,
        "rateCount": 0
    },
    "category": {
        "id": 1
    },
    "description": "smozi",
    "likes": 1,
    "liked": false,
    "timesTamp": 1575956493968
}

注意,当我使用json.toJson()返回结果时,返回的是实体的属性 我可以使用 json.toJson () 但我只想恢复实体的部分属性,包括 testattribut,此外使用 json.toJson () 会增加在网络上加载数据的负担

谢谢

【问题讨论】:

    标签: java playframework ebean


    【解决方案1】:

    您还需要在 ImageLink 上加入 JOIN 以将其作为结果集的一部分。

    【讨论】:

      【解决方案2】:

      最后我用Ebean.PathProperties修复它

      PathProperties fetchPath =  new PathProperties();
      fetchPath.addToPath("imagesLinks", "image");
      fetchPath.addToPath("imagesLinks.image", "url");        
      return ok(Ebean.json().toJson(data, fetchPath));
      

      希望对有同样问题的朋友有所帮助。 如果有其他方法可以做到这一点,我会很高兴读到你;)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-09
        相关资源
        最近更新 更多