解决 Hibernate Annotation 的 "no persistent classes found for query class" 问题

软件版本:
hibernate-3.2.0.cr2
hibernate-annotations-3.2.0.CR1

IDE:
idea 5.1

以前都是用XDoclet来实现类似Annotation的功能,但是xdoclet的版本更新实在太慢,永远跟不上hibernate的更新速度,导致很多hibernate新的功能xdoclet都没办法支持.还好,jdk5.0有了Annotation,而且hibernate也开始支持Annotation了.

原来以为从xdoclet转到Annotation很简单,没想到还是遇到了问题,先看代码:

 1 None.gif package  test;
 2 None.gif
 3 None.gif import  org.hibernate.annotations.Entity;
 4 None.gif
 5 None.gif import  javax.persistence.Id;
 6 None.gif import  java.io.Serializable;
 7 None.gif
 8 None.gif@Entity
 9 ExpandedBlockStart.gifContractedBlock.gif public   class  Flight  implements  Serializable dot.gif {
10InBlock.gif  Long id;
11InBlock.gif  String name;
12InBlock.gif
13InBlock.gif  @Id
14ExpandedSubBlockStart.gifContractedSubBlock.gif  public Long getId()dot.gif{
15InBlock.gif    return id;
16ExpandedSubBlockEnd.gif  }

17InBlock.gif
18ExpandedSubBlockStart.gifContractedSubBlock.gif  public void setId(Long id)dot.gif{
19InBlock.gif    this.id=id;
20ExpandedSubBlockEnd.gif  }

21InBlock.gif
22ExpandedSubBlockStart.gifContractedSubBlock.gif  public String getName()dot.gif{
23InBlock.gif    return name;
24ExpandedSubBlockEnd.gif  }

25InBlock.gif
26ExpandedSubBlockStart.gifContractedSubBlock.gif  public void setName(String name)dot.gif{
27InBlock.gif    this.name=name;
28ExpandedSubBlockEnd.gif  }

29InBlock.gif
30ExpandedSubBlockStart.gifContractedSubBlock.gif  public boolean equals(Object o)dot.gif{
31InBlock.gif    if(this==o) return true;
32InBlock.gif    if(o==null||getClass()!=o.getClass()) return false;
33InBlock.gif
34InBlock.gif    final Flight flight=(Flight)o;
35InBlock.gif
36InBlock.gif    if(id!=null?!id.equals(flight.id):flight.id!=nullreturn false;
37InBlock.gif    if(name!=null?!name.equals(flight.name):flight.name!=nullreturn false;
38InBlock.gif
39InBlock.gif    return true;
40ExpandedSubBlockEnd.gif  }

41InBlock.gif
42ExpandedSubBlockStart.gifContractedSubBlock.gif  public int hashCode()dot.gif{
43InBlock.gif    int result;
44InBlock.gif    result=(id!=null?id.hashCode():0);
45InBlock.gif    result=29*result+(name!=null?name.hashCode():0);
46InBlock.gif    return result;
47ExpandedSubBlockEnd.gif  }

48ExpandedBlockEnd.gif}

49 None.gif


看上去没什么问题吧?没想到运行的时候根本跑不起来,老是提示:
None.gif      [java]  10 : 54 : 55 , 842   INFO SessionFactoryObjectFactory: 82   -  Not binding factory to JNDI, no JNDI name configured
None.gif     [java] org.hibernate.hql.ast.QuerySyntaxException: Flight is not mapped [from Flight]
None.gif     [java]     at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:
180 )
None.gif     [java]     at org.apache.tools.ant.taskdefs.Java.run(Java.java:
710 )
None.gif     [java]     at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:
178 )
None.gif     [java]     at org.apache.tools.ant.taskdefs.Java.execute(Java.java:
84 )
None.gif     [java]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:
275 )
None.gif     [java]     at org.apache.tools.ant.Task.perform(Task.java:
364 )
None.gif     [java]     at org.apache.tools.ant.Target.execute(Target.java:
341 )
None.gif     [java]     at org.apache.tools.ant.Target.performTasks(Target.java:
369 )
None.gif     [java]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:
1216 )
None.gif     [java]     at org.apache.tools.ant.Project.executeTarget(Project.java:
1185 )
None.gif     [java]     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:
40 )
None.gif     [java]     at org.apache.tools.ant.Project.executeTargets(Project.java:
1068 )
None.gif     [java]     at org.apache.tools.ant.Main.runBuild(Main.java:
668 )
None.gif     [java]     at org.apache.tools.ant.Main.startAnt(Main.java:
187 )
None.gif     [java]     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:
246 )
None.gif     [java]     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:
67 )

看了半天看不出有什么问题,最后终于参考hibernate-annotations-3.2.0.CR1里面单元测试的代码才发现是这段代码有问题:

1 None.gif import  org.hibernate.annotations.Entity;
2 None.gif
3 None.gif import  javax.persistence.Id;
4 None.gif import  java.io.Serializable;
5 None.gif


要改成:

1 None.gif import  javax.persistence.Id;
2 None.gif import  javax.persistence.Entity;
3 None.gif import  java.io.Serializable;


原来我用idea开发时,在自动完成的时候想当然地选用了org.hibernate.annotations包下面的annotation,而实际上应该使用javax.persistence包下面的annotation.想想看也很有道理:这样一来我们的JAVA bean就不用import hibernate的包了,用的都是标准的java包. 55892.html

一餐三碗 2006-06-30 11:04 发表评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值