Ebean 不获取 oneToMany 关系
Ebean not fetch oneToMany relationship
我有一个 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));
}
我的问题是,当我 return 使用 Ebean.json().tojson () 查询结果时,testattribut 属性未 returned。
这是结果 returned:
{
"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 () 来 return 结果时,它不是 returned 实体的属性
我可以使用 json.toJson() 但我只想恢复实体的部分属性,包括 testattribut,此外使用 json.toJson() 会使网络上的数据加载变得很重
谢谢
您还需要在 ImageLink 上进行 JOIN 以将其作为结果集的一部分包含在内。
最后我用 Ebean.PathProperties
修复了它
PathProperties fetchPath = new PathProperties();
fetchPath.addToPath("imagesLinks", "image");
fetchPath.addToPath("imagesLinks.image", "url");
return ok(Ebean.json().toJson(data, fetchPath));
希望对遇到同样问题的朋友有所帮助。
如果有另一种方法,我会很高兴看到你;)
我有一个 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));
}
我的问题是,当我 return 使用 Ebean.json().tojson () 查询结果时,testattribut 属性未 returned。 这是结果 returned:
{
"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 () 来 return 结果时,它不是 returned 实体的属性 我可以使用 json.toJson() 但我只想恢复实体的部分属性,包括 testattribut,此外使用 json.toJson() 会使网络上的数据加载变得很重
谢谢
您还需要在 ImageLink 上进行 JOIN 以将其作为结果集的一部分包含在内。
最后我用 Ebean.PathProperties
PathProperties fetchPath = new PathProperties();
fetchPath.addToPath("imagesLinks", "image");
fetchPath.addToPath("imagesLinks.image", "url");
return ok(Ebean.json().toJson(data, fetchPath));
希望对遇到同样问题的朋友有所帮助。 如果有另一种方法,我会很高兴看到你;)