使用struts2+hibernate+spring 数据库MySql 
用下面的方法查询头8条数据出问题了 大家帮帮忙。。
         private Session session;
public List findNewsTop(){
String hql="from News as a order by a.writerDate desc ";
Query query=session.createQuery("from News as a order by a.writerDate desc");
query.setFirstResult(0);
query.setMaxResults(8);
return query.list();调试到Query query=session.createQuery("from News as a order by a.writerDate desc");这局就出现下面错误java.lang.IllegalArgumentException: Unmatched braces in the pattern.
at java.text.MessageFormat.applyPattern(Unknown Source)
at java.text.MessageFormat.<init>(Unknown Source)
at java.text.MessageFormat.format(Unknown Source)
at org.eclipse.jdt.internal.core.util.Messages.bind(Messages.java:388)
at org.eclipse.jdt.internal.core.util.Messages.bind(Messages.java:354)
at org.eclipse.jdt.internal.core.util.Disassembler.disassemble(Disassembler.java:883)
at org.eclipse.jdt.internal.core.util.Disassembler.disassemble(Disassembler.java:290)
at org.eclipse.jdt.internal.ui.javaeditor.ClassFileEditor$SourceAttachmentForm.updateCodeView(ClassFileEditor.java:403)
at org.eclipse.jdt.internal.ui.javaeditor.ClassFileEditor$SourceAttachmentForm.createControl(ClassFileEditor.java:207)
at org.eclipse.jdt.internal.ui.javaeditor.ClassFileEditor.verifyInput(ClassFileEditor.java:764)
at org.eclipse.jdt.internal.ui.javaeditor.ClassFileEditor.createPartControl(ClassFileEditor.java:714)
at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:661)
at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:426)
at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:592)
at org.eclipse.ui.internal.EditorReference.getEditor(EditorReference.java:263)
at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2739)
at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2651)
at org.eclipse.ui.internal.WorkbenchPage.access$13(WorkbenchPage.java:2643)
at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2595)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2590)
at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2574)
at org.eclipse.debug.internal.ui.sourcelookup.SourceLookupFacility$1.run(SourceLookupFacility.java:355)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
at org.eclipse.debug.internal.ui.sourcelookup.SourceLookupFacility.openEditor(SourceLookupFacility.java:365)
at org.eclipse.debug.internal.ui.sourcelookup.SourceLookupFacility.openEditor(SourceLookupFacility.java:274)
at org.eclipse.debug.internal.ui.sourcelookup.SourceLookupFacility.display(SourceLookupFacility.java:218)
at org.eclipse.debug.ui.DebugUITools.displaySource(DebugUITools.java:764)
at org.eclipse.debug.internal.ui.elements.adapters.StackFrameSourceDisplayAdapter$SourceDisplayJob.runInUIThread(StackFrameSourceDisplayAdapter.java:167)
at org.eclipse.ui.progress.UIJob$1.run(UIJob.java:94)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:129)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3659)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3296)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2389)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2353)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2219)
at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:169)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:508)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:447)
at org.eclipse.equinox.launcher.Main.run(Main.java:1173)
at org.eclipse.equinox.launcher.Main.main(Main.java:1148)

解决方案 »

  1.   

    你的SQL语句对么?你确定只要写from就够了?
      

  2.   

    hibernate里面是可以直接用from形式的。private Session session; 
    public List findNewsTop(){ 
    String hql="from News as a order by a.writerDate desc "; 
    Query query=session.createQuery("from News as a order by a.writerDate desc"); 
    query.setFirstResult(0); 
    query.setMaxResults(8); 
    return query.list(); 
    楼主,你的session貌似没有获得值就直接用createQuery()方法。其他应该没有问题。如果session没问题的话,楼主现在数据库中查询前八条看看能不能查询出来。
      

  3.   


    public List findNewsTop(){ 
    String hql="from News as a order by a.writerDate desc "; 
    Query query=session.createQuery("from News as a order by a.writerDate desc"); 
    query.setFirstResult(0); 
    query.setMaxResults(8); 
    return query.list(); 我晕了。。
      楼主你都没给参数它怎么知道呢。。
      你可以这么写。
       
    /**
     *pageNo为显示第几页的数据
     *pageSize为每页显示多少行数据
    */
    public List findNewsTop(int pageNo,int pageSize){ 
    String hql="from News as a order by a.writerDate desc "; 
    Query query=session.createQuery("from News as a order by a.writerDate desc"); 
    int firstResultIndex=PageSize*(pageNo-1);//获得当前页的索引
    query.setFirstResult(firstResultIndex); 
    query.setMaxResults(pageSize); 
    return query.list(); 调用list newsList=findNewsTop(1,2)//调用方法 返回每页2条数据的第一页数据
      

  4.   

    楼主报的参数不合法造成的。。java.lang.IllegalArgumentException还可以这么写
     private Session session; 
    public List findNewsTop(){ 
    String hql="from News as a where a.id<=8 order by a.writerDate desc";//写在HQL语句中
    Query query=session.createQuery();
    return query.list(); 
      

  5.   


    private Session session; 
    public List findNewsTop(){ 
    String hql="from News as a where a.id<=8 order by a.writerDate desc";//写在HQL语句中
    Query query=session.createQuery(hql);//忘了传参了。。嘿嘿.......
    return query.list();
      

  6.   

    public class IllegalArgumentException
    extends RuntimeException
    抛出的异常表明向方法传递了一个不合法或不正确的参数。 
      

  7.   

    query.setFirstResult(0); 
    ->
    query.setFirstResult(1);试试看 
      

  8.   


    private Session session; 
    public List findNewsTop(){ 
    //加多一句吧。
    session = this.getSessionFactory().openSession();//获取session.
    String hql="from News as a order by a.writerDate desc "; //貌似这句有点多余了!^_^
    Query query=session.createQuery("from News as a order by a.writerDate desc"); 
    query.setFirstResult(0); 
    query.setMaxResults(8);
    if(session!=null)session.close(); //关闭session.
    return query.list(); 
      

  9.   

      没看到上面的
       Private Session session//怎么还有这一句???????
      

  10.   

    session没值的话就不是报这个错了,应该是下面两个参数传的有问题,多调调就好了
      

  11.   


    关闭session那句不要或者条件换下才可以用· 谢谢用你的弄出来了·
      

  12.   

    private Session session; 
    public List findNewsTop(){ 
    //加多一句吧。
    session = this.getSessionFactory().openSession();//获取session.
    String hql="from News as a order by a.writerDate desc "; //貌似这句有点多余了!^_^
    Query query=session.createQuery("from News as a order by a.writerDate desc"); 
    query.setFirstResult(0); 
    query.setMaxResults(8);
    if(session!=null)session.close(); //关闭session.
    return query.list(); 多谢9楼的!不过关闭session那句不要或者条件换下才可以用
      

  13.   

    晕死,我都告诉你,你的session没有获得值就直接调用了。如何获得session还要人家写给你吗?