2015-12-03 73 views
2

我有一个展示的关系数据库更喜欢这个 enter image description here 我想要得到的信息了两次表Gmail和bloggerwith条件博客[博客]和用户的[Gmail]值中不存在的表md_parse_blogger 我想知道如何做出正确的语法,其中,请大家帮我凡报表多对多关系冬眠

public List showDatawebA(String blog, String url) { 
     String sql = "FROM MdParse g,MdBlogger b,MdParseBlogger pb" 
       + " WHERE pb.mdBlogger=:blog and pb.mdParse=:url"; 
     Query createQuery = currentSession.createQuery(sql); 
     createQuery.setParameter("blog", blog); 
     createQuery.setParameter("url", url); 
     return createQuery.list(); 
    } 

随着mdBlogger,mdGmail是属性类MdParseBlogger,

public class MdParseBlogger implements java.io.Serializable { 
    private MdParseBloggerId id; 
    private MdBlogger mdBlogger; 
    private MdParse mdParse; 
    ........... 
    } 

错误

Exception in thread "main" org.hibernate.QueryParameterException: Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 2 
    at org.hibernate.engine.query.spi.ParameterMetadata.getOrdinalParameterDescriptor(ParameterMetadata.java:89) 
    at org.hibernate.engine.query.spi.ParameterMetadata.getOrdinalParameterExpectedType(ParameterMetadata.java:109) 
    at org.hibernate.internal.AbstractQueryImpl.determineType(AbstractQueryImpl.java:507) 
    at org.hibernate.internal.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:479) 
    at dbUtility.DBTable.showDataweb(DBTable.java:76) 
    at dbUtility.DBTable.main(DBTable.java:83) 
Picked up _JAVA_OPTIONS: -Xmx512M 
+2

你能尝试属性名称,而不是对的setParameter()之类指数: 'createQuery.setParameter( “博客”,博客); createQuery.setParameter(“url”,url); ' –

+0

我在你的指导下进行了搜索,但我只是使用mapping找到了结果。我只是想用查询,如果可能的话,我希望你能写一个代码示例或特定路径来帮助我解决我的问题 –

回答

1

您混合了命名参数和序号参数。它应该是

String sql ="FROM MdGmail g,MdBlogger b,MdParseBlogger pb" 
      + " WHERE pb.mdBlogger=? and pb.mdGmail=?"; 
    Query createQuery = currentSession.createQuery(sql); 
    createQuery.setParameter(1, blog); 
    createQuery.setParameter(2, url); 

或者

String sql ="FROM MdGmail g,MdBlogger b,MdParseBlogger pb" 
      + " WHERE pb.mdBlogger=:blog and pb.mdGmail=:url"; 
    Query createQuery = currentSession.createQuery(sql); 
    createQuery.setParameter("blog", blog); 
    createQuery.setParameter("url", url); 
+0

谢谢@StanislavL命令是积极的,原谅我的贪婪。我希望你能帮助我更多的问题http://stackoverflow.com/questions/34060344/hibernate-illegalargumentexception-in-class-getter-method-of-property –

+0

我的英语不是很好,看到你删除你的评论一个新的问题,我担心我用这个词让你感到不舒服。 –

+1

@MaTâm不,你的英语很好。我刚刚删除了错误的答案)。尝试在那里添加你的实体代码。看起来像返回的类型有问题(可能是获得者) – StanislavL