软件版本:
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
package test;
2
3
import org.hibernate.annotations.Entity;
4
5
import javax.persistence.Id;
6
import java.io.Serializable;
7
8
@Entity
9
public class Flight implements Serializable
{
10
Long id;
11
String name;
12
13
@Id
14
public Long getId()
{
15
return id;
16
}
17
18
public void setId(Long id)
{
19
this.id=id;
20
}
21
22
public String getName()
{
23
return name;
24
}
25
26
public void setName(String name)
{
27
this.name=name;
28
}
29
30
public boolean equals(Object o)
{
31
if(this==o) return true;
32
if(o==null||getClass()!=o.getClass()) return false;
33
34
final Flight flight=(Flight)o;
35
36
if(id!=null?!id.equals(flight.id):flight.id!=null) return false;
37
if(name!=null?!name.equals(flight.name):flight.name!=null) return false;
38
39
return true;
40
}
41
42
public int hashCode()
{
43
int result;
44
result=(id!=null?id.hashCode():0);
45
result=29*result+(name!=null?name.hashCode():0);
46
return result;
47
}
48
}
49
看上去没什么问题吧?没想到运行的时候根本跑不起来,老是提示:
[java] 10:54:55,842 INFO SessionFactoryObjectFactory:82 - Not binding factory to JNDI, no JNDI name configured
[java] org.hibernate.hql.ast.QuerySyntaxException: Flight is not mapped [from Flight]
[java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:180)
[java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:710)
[java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:178)
[java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:84)
[java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
[java] at org.apache.tools.ant.Task.perform(Task.java:364)
[java] at org.apache.tools.ant.Target.execute(Target.java:341)
[java] at org.apache.tools.ant.Target.performTasks(Target.java:369)
[java] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
[java] at org.apache.tools.ant.Project.executeTarget(Project.java:1185)
[java] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40)
[java] at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
[java] at org.apache.tools.ant.Main.runBuild(Main.java:668)
[java] at org.apache.tools.ant.Main.startAnt(Main.java:187)
[java] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:246)
[java] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:67)看了半天看不出有什么问题,最后终于参考hibernate-annotations-3.2.0.CR1里面单元测试的代码才发现是这段代码有问题:
1
import org.hibernate.annotations.Entity;
2
3
import javax.persistence.Id;
4
import java.io.Serializable;
5
要改成:
1
import javax.persistence.Id;
2
import javax.persistence.Entity;
3
import java.io.Serializable; 原来我用idea开发时,在自动完成的时候想当然地选用了org.hibernate.annotations包下面的annotation,而实际上应该使用javax.persistence包下面的annotation.想想看也很有道理:这样一来我们的JAVA bean就不用import hibernate的包了,用的都是标准的java包.
分享到:
相关推荐
这里面包涵了需要用Hibernate Annotation时,所需要的所有jar包! 现在我们公司在做web项目的时候,已经不用*.hbm.xml这种映射文件了,都是用Annotation(注解)方式来完成实体与表之间的映射关系,这样看起来比用...
hibernate annotation中文文档
《Hibernate注解与Hibernate3深度解析》 在Java开发领域,Hibernate作为一种强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本篇将深入探讨Hibernate 3版本中的注解使用,帮助开发者理解如何利用注解进行...
《Hibernate Annotation 中文文档》是Java开发者们的重要参考资料,它详细介绍了如何在Hibernate框架中使用注解进行对象关系映射(ORM)。Hibernate是一款强大的开源Java持久化框架,它简化了数据库与Java对象之间的...
在Hibernate中,注解(Annotation)是一种声明式的方法,用于配置实体类、属性以及它们与数据库表之间的映射关系。本文将深入探讨“最全的Hibernate Annotation API文档”中的关键知识点。 一、实体类(Entity) 在...
为了正确使用Hibernate Annotation,开发环境中还需要其他依赖,如Hibernate核心库(hibernate-core.jar)和数据库驱动,它们共同构成了完整的Hibernate ORM解决方案。在实际项目中,通常会使用构建工具(如Maven或...
**Hibernate Annotation 中文文档** 在Java的持久化框架中,Hibernate是一个非常重要的工具,它极大地简化了数据库操作。随着技术的发展,Hibernate Annotation逐渐成为主流,因为它提供了更直观、更简洁的方式来...
**Hibernate Annotation 入门** Hibernate 是一款非常流行的Java对象关系映射(ORM)框架,它允许开发者使用面向对象的方式操作数据库。而Hibernate Annotation是Hibernate的一个重要特性,它通过在Java类和字段上...
Hibernate Annotation
hibernate 注解 annotation 教程
《Hibernate Annotation 学习笔记》 在Java的持久化框架中,Hibernate以其强大的功能和易用性成为开发者首选之一。而Hibernate Annotation则是Hibernate提供的一种基于注解的实体映射方式,它极大地简化了传统XML...
Hibernate annotation 3.4 api CHM
Hibernate Criteria API提供了注解方式的查询,如`@NamedQuery`和`@NamedNativeQuery`,允许开发者定义预编译的查询语句,提高性能。 6. **优势** - 简洁性:注解使得ORM配置直接嵌入到Java代码中,减少XML配置...
学习JPA——Hibernate_Annotation使用实例学习JPA——Hibernate_Annotation使用实例学习JPA——Hibernate_Annotation使用实例
### HibernateAnnotation 技术概述 在Java开发领域中,Hibernate框架是进行对象关系映射(Object-Relational Mapping,简称ORM)的一种非常流行的工具。它能够帮助开发者将面向对象的模型与关系型数据库进行桥接,...
总结来说,这个 "Spring Hibernate Annotation demo" 展示了如何在 Spring 框架中使用注解配置来管理依赖,以及如何利用 Hibernate 的注解进行数据持久化。同时,它还涉及到了 Flex 前端与后端的交互。通过学习这个 ...
4. **查询语言**: HQL(Hibernate Query Language)是Hibernate的SQL扩展,用于查询对象。另外,Criteria API提供了一种类型安全的、面向对象的查询方式。 5. **缓存**: Hibernate支持一级缓存(Session级别的...
【标题】:深入理解Hibernate Annotation及其使用 【描述】:本文将全面介绍Hibernate Annotation的使用,包括事务管理和声明式事务处理,以及如何通过注解简化数据库持久化操作。 【标签】:Hibernate, ...
《深入理解Hibernate注解》 Hibernate作为Java领域中的一...综上,Hibernate注解为Java开发人员提供了更便捷、更直观的ORM解决方案。通过熟练掌握并合理运用这些注解,开发者可以更好地驾驭数据库操作,提高开发效率。