(Grails 2.4.2)Grails使用不会产生预期结果的集合查询域类
我试图获取用户可以访问的故事列表。因此,故事的所有故事用户都是故事的所有者,或者用户处于故事的编辑集合中。我已经尝试了许多不同的查询,从createCriteria到编写HQL。我可以查询用户是所有者的所有故事。我可以查询用户在编辑器集合中的所有故事,但是当我将查询与OR..I一起输入时,得不到正确的结果。
class Story {
String title
Date dateCreated
Date lastUpdated
String description
Boolean isPublic
List storyContent = []
User owner
static belongsTo = [owner: User]
static hasMany = [storyContent : StoryContent, viewers : Viewer, editors : Editor]
...more
class Editor {
User user
static belongsTo = [story: Story]
当我做下面的查询:
def hql = "from Story as s left outer join s.editors as se where s.owner.username = 'joe'"
def results = Story.executeQuery(hql)
我得到正确的结果:
Result: [[com.storycreate.Story : 3, com.storycreate.Editor : 1], [com.storycreate.Story : 2, null]]
乔的故事2和3,故事的主人现在我查询所有Joe编辑的故事
def hql = "from Story as s left outer join s.editors as se where se.user.username='joe'"
def results = Story.executeQuery(hql)
,得到正确的结果:(乔既是编辑和老板的故事3和story4编辑)
Result: [[com.storycreate.Story : 3, com.storycreate.Editor : 1], [com.storycreate.Story : 4, com.storycreate.Editor : 4]]
现在
如果我结合这让故事的一个列表,其中乔是所有者或编辑:
def hql = "from Story as s left outer join s.editors as se where (s.owner.username='joe' OR se.user.username='joe')"
def results = Story.executeQuery(hql)
我得到不正确的结果(失踪的故事2,其中乔是老板)
Result: [[com.storycreate.Story : 3, com.storycreate.Editor : 1], [com.storycreate.Story : 4, com.storycreate.Editor : 4]]
最后,我想查询给我所有的故事,其中isPublic为TRUE或登录用户的列表是流量编辑或者故事的观众。但我似乎缺少对Hibernate如何在这里工作的一些理解。
如果乔是故事2和3的车主,我觉得这个结果'结果:[com.storycreate.Story:3,COM .storycreate.Editor:1],[com.storycreate.Story:2,null]]'没有显示它。 – 2014-10-30 22:58:14
也许我不了解结果。我对Grails有点新手。对我来说结果显示2行。第一个显示ID 3的Story对象,第二个显示Story对象ID 2.这是不对的? – jer0dh 2014-10-30 23:18:59