Java 带有集合的Jodd DbOomQuery提示
我用它来管理我的查询,它真的很棒。但现在我正面临着一个没有记录的情况 我有一个查询,返回一个对象列表(a),每个a都有一个对象列表(B),每个B都与其他对象(C、D、E等)连接。问题是类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
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也许你可以测试分支?请参阅我的编辑。