Java 带有集合的Jodd DbOomQuery提示

Java 带有集合的Jodd DbOomQuery提示,java,jodd,Java,Jodd,我用它来管理我的查询,它真的很棒。但现在我正面临着一个没有记录的情况 我有一个查询,返回一个对象列表(a),每个a都有一个对象列表(B),每个B都与其他对象(C、D、E等)连接。问题是类JoinHintResolver没有在B对象上设置值C、D、E。B对象在A对象上设置正确 下面是重现错误的测试方法。其他使用的类(Girl,BadBoy)来自Jodd测试包 public void testHintsList() { Room room = new Room(); Girl gir

我用它来管理我的查询,它真的很棒。但现在我正面临着一个没有记录的情况

我有一个查询,返回一个对象列表(a),每个a都有一个对象列表(B),每个B都与其他对象(C、D、E等)连接。问题是类
JoinHintResolver
没有在B对象上设置值C、D、E。B对象在A对象上设置正确

下面是重现错误的测试方法。其他使用的类(
Girl
BadBoy
)来自Jodd测试包

public void testHintsList() {
    Room room = new Room();
    Girl girl = new Girl();
    BadBoy badBoy = new BadBoy();
    Object[] data = new Object[] { room, badBoy, girl };

    JoinHintResolver jhr = new JoinHintResolver();
    Object[] result = jhr.join(data, "room, room.boys, room.boys.girl");
    assertEquals(1, result.length);
    assertTrue(result[0] instanceof Room);
    room = (Room) result[0];
    badBoy = room.getBoys().get(0);
    assertEquals(girl, badBoy.girl);
}

public class Room {
    private Long id;
    private List<BadBoy> boys;

    public Room() {
    }

    public Long getId() {
    return id;
    }

    public void setId(Long id) {
    this.id = id;
    }

    public List<BadBoy> getBoys() {
    return boys;
    }

    public void setBoys(List<BadBoy> boys) {
    this.boys = boys;
    }
}
public void testHintsList(){
房间=新房间();
女孩=新女孩();
BadBoy BadBoy=新的BadBoy();
对象[]数据=新对象[]{房间,坏男孩,女孩};
JoinHintResolver jhr=新的JoinHintResolver();
Object[]result=jhr.join(数据“room,room.boys,room.boys.girl”);
资产质量(1,结果长度);
assertTrue(房间的结果[0]实例);
房间=(房间)结果[0];
badBoy=room.getBoys().get(0);
assertEquals(女孩,坏男孩,女孩);
}
公共教室{
私人长id;
私人名单男孩;
公共房间(){
}
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公众名单{
返回男孩;
}
公共空间挫折(列出男孩){
这个男孩=男孩;
}
}
文档中没有这样的例子,谷歌也没有。所以我不知道我是否做错了什么,或者Jodd是否没有为这种情况做好准备


我如何设置提示,以便Jodd正确设置值?

因此,这里的问题是,您的
房间中有一群
坏小子。还有提示:

room.boys.girl
建议他们将
Girl
实例注入到集合中。用java的话来说,这相当于:

getRoom().getBoys().setGirl(girl);
显然,由于
getBoys()
返回一个
列表
,因此我们无法设置
girl
属性

要测试我所说的,请使用以下提示:

room.boys[0].girl
这将把
girl
实例注入列表的第一个元素。或者,您可以将
房间
更改为只有一个
男孩
属性,而不是列表,原始提示将起作用

我希望这对你有用:)

(见附件)

编辑 在中,我有一个类似于修复的东西:)现在您可以编写如下内容:

select $C{room.*}, $C{room.boys:boy.*}, $C{room.boys.girl:girl.*}
    from $T{Room room} join $T{Boy4 boy} on $room.id=$boy.roomId 
    join $T{Girl4 girl} on $boy.id=$girl.boyId 
    order by $room.id, $boy.id
您可以使用以下型号:


房间
男孩的名单
。每个
男孩
都分配了一个
女孩
。当启用了
entityAware
时,此功能应能正常工作。也许您有时间测试分支?

因此,这里的问题是您的
房间中有一组
坏小子
s。还有提示:

room.boys.girl
建议他们将
Girl
实例注入到集合中。用java的话来说,这相当于:

getRoom().getBoys().setGirl(girl);
显然,由于
getBoys()
返回一个
列表
,因此我们无法设置
girl
属性

要测试我所说的,请使用以下提示:

room.boys[0].girl
这将把
girl
实例注入列表的第一个元素。或者,您可以将
房间
更改为只有一个
男孩
属性,而不是列表,原始提示将起作用

我希望这对你有用:)

(见附件)

编辑 在中,我有一个类似于修复的东西:)现在您可以编写如下内容:

select $C{room.*}, $C{room.boys:boy.*}, $C{room.boys.girl:girl.*}
    from $T{Room room} join $T{Boy4 boy} on $room.id=$boy.roomId 
    join $T{Girl4 girl} on $boy.id=$girl.boyId 
    order by $room.id, $boy.id
您可以使用以下型号:


房间
男孩的名单
。每个
男孩
都分配了一个
女孩
。当启用了
entityAware
时,此功能应能正常工作。也许你有时间测试一下分支?

问得好!今天我将试着做一个测试案例,让你们回答。敬请期待!问得好!今天我将试着做一个测试案例,让你们回答。敬请期待!问题是,我的模型从房间到坏男孩有一对多的关系,从坏男孩到女孩又有一对多的关系。所以,你的建议对我不起作用。但是如果提示
room.boys[0].girl
起作用,那么让
room.boys[CURRENT].girl
起作用可能会很容易。CURRENT表示当前行填充的对象的索引。是的,得到了;让我来分析一下我们能做些什么:)但现在这个问题的答案是:乔德还没有准备好——还没有!谢谢你给我这个很棒的例子!嘿@EduardoEdington你能给我发一份DB模式的大纲吗(比如哪个实体引用了另一个吗?)请把它发送给support at-以便重新创建并更正它。嘿@EduardoEdington也许你可以测试分支?看我的编辑。问题是我的模型从房间到坏男孩有一对多的关系,从坏男孩到女孩又有一对多的关系。所以,你的建议对我不起作用。但是如果提示
room.boys[0].girl
起作用,那么让
room.boys[CURRENT].girl
起作用可能会很容易。CURRENT表示当前行填充的对象的索引。是的,得到了;让我来分析一下我们能做些什么:)但现在这个问题的答案是:乔德还没有准备好——还没有!谢谢你给我这个很棒的例子!嘿@EduardoEdington你能给我发一份DB模式的大纲吗(比如哪个实体引用了另一个吗?)请把它发送给support at-以便重新创建并更正它。嘿@EduardoEdington也许你可以测试分支?请参阅我的编辑。