- 浏览: 124711 次
- 性别:
- 来自: 咸阳
文章分类
最新评论
-
yds3300376yd:
我也遇到上述问题了,不过代码不在我这,还没开始改~~~
上传时,出现the request doesn't contain a multipart/form -
孤狼A组:
在提交表单里加上这一句:enctype="multi ...
上传时,出现the request doesn't contain a multipart/form -
homlet:
不可能吧,我用的就是ie8,可以识别呀
ie8不认识window.confirm -
lxs647:
我的也是一样儿的,问题的关键不在这儿、、、
上传时,出现the request doesn't contain a multipart/form -
guoguo1010:
不对吧 我的Form本来就有Action啊
上传时,出现the request doesn't contain a multipart/form
注解映射必须满足两大条件:Hibernate3.2以上版本和JSEE 5。
@Entity 类注释,所有要持久化的类都要有
Java代码
- @Entity
- public class Org implements java.io.Serializable {
- }
@Entitypublic class Org implements java.io.Serializable {}
@Id 主键
Java代码
- @Id
- @GeneratedValue
- private String orgId;
- private String orgName;
@Id @GeneratedValue private String orgId; private String orgName;
@Column(name="...") 该属性对应表中的字段是什么,没有name表示一样
@Table 对象与表映射
@UniqueConstraint 唯一约束
@Version 方法和字段级,乐观锁用法,返回数字和timestamp,数字为首选
@Transient 暂态属性,表示不需要处理
@Basic 最基本的注释。有两个属性:fetch是否延迟加载,optional是否允许null
@Enumerated 枚举类型
@Temporal 日期转换。默认转换Timestamp
@Lob 通常与@Basic同时使用,提高访问速度。
@Embeddable 类级,表可嵌入的
@Embedded 方法字段级,表被嵌入的对象和@Embeddable一起使用
@AttributeOverrides 属性重写
@AttributeOverride 属性重写的内容和@AttributeOverrides一起嵌套使用
@SecondaryTables 多个表格映射
@SecondaryTable 定义辅助表格映射和@SecondaryTables一起嵌套使用
@GeneratedValue 标识符生成策略,默认Auto
表与表关系映射
@OneToOne:一对一映射。它包含五个属性:
targetEntity:关联的目标类
Cascade:持久化时的级联操作,默认没有
fetch:获取对象的方式,默认EAGER
Optional:目标对象是否允许为null,默认允许
mappedBy:定义双向关联中的从属类。
单向:
@JoinColumn:定义外键(主表会多一字段,做外键)
@OneToMany:一对多映射;@ManyToOne:多对一映射
单向一对多:
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="book_oid")/**book:表;oid:book表的主键;无name会按此规则自动生成*/
单向多对一:
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="author_oid")
关联表格一对多:
@OneToMany(cascade=CascadeType.ALL)
@JoinTable(joinColumn={@JoinColumn(name="BOOK_OBJECT_OID")},inverseJoinColumns={@JoinColumn(name="AUTHER_OBJECT_OID")})
双向一对多或多对一:
不需要多一张表,只是使用mappedBy:使用在One一方,值为One方类名表示Many的从属类。
Java代码
- @Entity
- public class Org implements java.io.Serializable {
- // Fields
- @Id
- @GeneratedValue
- private String orgId;
- private String orgName;
- @OneToMany(mappedBy = "org")
- private List<Department> departments;
- // Constructors
- ...
- // Property accessors
- ...
- }
@Entitypublic class Org implements java.io.Serializable { // Fields @Id @GeneratedValue private String orgId; private String orgName; @OneToMany(mappedBy = "org") private List<Department> departments; // Constructors... // Property accessors...}
Java代码
- @Entity
- public class Department implements java.io.Serializable {
- // Fields
- @Id
- @GeneratedValue
- private String id;
- private String name;
- @ManyToOne(fetch=FetchType.EAGER)
- @JoinColumn(name="org_orgId")
- private Org org;
- @OneToMany(mappedBy = "department")
- private List<Employee> employees;
- // Constructors
- public List<Employee> getEmployees() {
- return employees;
- }
- public void setEmployees(List<Employee> employees) {
- this.employees = employees;
- }
- public Org getOrg() {
- return org;
- }
- public void setOrg(Org org) {
- this.org = org;
- }
- /** default constructor */
- .
- .
- .
- }
@Entitypublic class Department implements java.io.Serializable { // Fields @Id @GeneratedValue private String id; private String name; @ManyToOne(fetch=FetchType.EAGER) @JoinColumn(name="org_orgId") private Org org; @OneToMany(mappedBy = "department") private List<Employee> employees; // Constructors public List<Employee> getEmployees() { return employees; } public void setEmployees(List<Employee> employees) { this.employees = employees; } public Org getOrg() { return org; } public void setOrg(Org org) { this.org = org; } /** default constructor */ . . . }
Java代码
- @Entity
- public class Employee implements java.io.Serializable {
- // Fields
- @Id
- @GeneratedValue
- private String employeeId;
- private String employeeName;
- private String passWord;
- private Integer age;
- private Integer sex;
- @ManyToOne(fetch=FetchType.EAGER)
- @JoinColumn(name="department_id")
- private Department department;
- public Department getDepartment() {
- return department;
- }
- public void setDepartment(Department department) {
- this.department = department;
- }
- /** default constructor */
- ...
- // Property accessors
- ...
- }
@Entitypublic class Employee implements java.io.Serializable { // Fields @Id @GeneratedValue private String employeeId; private String employeeName; private String passWord; private Integer age; private Integer sex; @ManyToOne(fetch=FetchType.EAGER) @JoinColumn(name="department_id") private Department department; public Department getDepartment() { return department; } public void setDepartment(Department department) { this.department = department; } /** default constructor */ ... // Property accessors ...}
双向多对多:@ManyToMany.单向多对多这里不在赘述(没有太多实际意义)
这个比较简单,看下代码就明白了:
Java代码
- @Entity
- public class Book implements java.io.Serializable {
- @Id
- private int id;
- private String name;
- private float money;
- @ManyToMany(cascade = CascadeType.ALL)
- private List<Author> authors;
- public List<Author> getAuthors() {
- return authors;
- }
- public void setAuthors(List<Author> authors) {
- this.authors = authors;
- }
- ...
- }
@Entitypublic class Book implements java.io.Serializable { @Id private int id; private String name; private float money; @ManyToMany(cascade = CascadeType.ALL) private List<Author> authors; public List<Author> getAuthors() { return authors; } public void setAuthors(List<Author> authors) { this.authors = authors; } ...}
Java代码
- @Entity
- public class Author implements java.io.Serializable {
- @Id
- private int id;
- private String name;
- private int age;
- @ManyToMany(mappedBy="authors")
- private List<Book> books;
- public List<Book> getBooks() {
- return books;
- }
- public void setBooks(List<Book> books) {
- this.books = books;
- }
- ...
- }
@Entitypublic class Author implements java.io.Serializable { @Id private int id; private String name; private int age; @ManyToMany(mappedBy="authors") private List<Book> books; public List<Book> getBooks() { return books; } public void setBooks(List<Book> books) { this.books = books; } ...}
需要注意的是:注释最好加在属性上,不要加在get方法上,那样做有时候就会出错。比如:@ManyToMany的时候就会报错!
注意import javax.xx.Entity ,而不是org.hibernate.xx.Entity。
Descn属性不存在于数据库中,用@Transient 注明
------------------------------------------
1,需要: Hibernate库文件,Hibernate Annotations库,ejb3-persstence.jar(Java 持久化API)
sessionFactory=new AnnotationConfiguration().buildSessionFactory();
------------------------------------------
2,<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="annotatedClasses">
<list>
<value>com.onjava.modelplanes.domain.PlaneType</value>
</list>
</property>
</bean>
------------------------------------------
1,@Entity
@Table(name = "teacher_info")
@IdClass(UUIDHexGenerator.class)
public class UserMember implements java.io.Serializable
2,@entity通过getters/setters方法访问,或直接访问他的成员变量。
@Entity(access = AccessType.PROPERTY)
@Entity(access = AccessType.FIELD)
------------------------------------------
映射标识符
1,@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private String id;
2,@Id(generate=GeneratorType.SEQUENCE, generator='SEQ_STORE')
3,@Id(generate=GeneratorType.IDENTITY)
------------------------------------------
映射属性
1,@Transient
2,@Column(name="PLANE_ID", length=80, nullable=true)
3,@Basic(fetch = FetchType.LAZY)
4,@Serialized 凡标识@Serialized的属性将被序列化
public Country getCountry() { ... }
5,@Lob标识了存储对象可能是个CLOB或者BLOB。
@Lob(type=LobType.CLOB)
public String getFullText(){return fullText;}
@Lob(type = LobType.BLOB)
public byte[] getFullCode() {return fullCode;}
@Version 定义乐观锁机制使用
------------------------------------------
关联关系:
一、一对一:
1,@OneToOne(mappedBy = "address")
public User getUser() {
return user;
}
1、两边都定义了@OneToOne,但都没有定义mappedBy,则user和address表都会生成到对方的外键,双方都是这个关系的拥有者。
2、两边都定义了@OneToOne,如果user定义了mappedBy,则在address表生成到user的外键,address是这个关系的拥有者;如果address定义
了mappedBy,则在user表生成到address的外键,user是这个关系的拥有者。
二、一对多,多对一:
2,@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
3,@OneToMany(mappedBy="planeType",cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@OrderBy("name")
public List<ModelPlane> getModelPlanes() {
return modelPlanes;
}
其中定义mappedBy的是@OneToMany,也就是说One这一方是关系的拥有者。Many一方的表中生成到关联类的外键。
三、@ManyToMany
private Set authors = new HashSet<Author>();
@ManyToMany
public Set<Author> getAuthors(){
return authors;
}
private Set books = new HashSet<Book>();
@ManyToMany(mappedBy="authors")
public Set<Book> getBooks(){
return books;
}
@ManyToMany会生成中间表,具体表名和字段可以通过@AssociationTable来定义,默认的就可以了,同样关系的非拥有者,需要定义mappedBy属性。
------------------------------------------
命名查询
你也可以通过注解,利用@NameQueries和@NameQuery注解,如下:
@NamedQueries(
{
@NamedQuery(name="planeType.findAll",query="select p from PlaneType p" ),
@NamedQuery(name="planeType.delete",query="delete from PlaneType where id=:id" )
}
)
------------------------------------------
内嵌对象(组件)
@Embedded({
@AttributeOverride(name='iso2', column = @Column(name='bornIso2') ),
@AttributeOverride(name='name', column = @Column(name='bornCountryName') )
})
Country bornIn;
...
}
@Embeddable(access = AccessType.FIELD)
public class Address implements Serializable {
String city;
Country nationality;
}
@Embeddable
public class Country implements Serializable {
private String iso2;
private String name;
public String getIso2() { return iso2; }
public void setIso2(String iso2) { this.iso2 = iso2; }
@Column(name='countryName')
public String getName() { return name; }
public void setName(String name) { this.name = name; }
...
}
------------------------------------------
自定义的主键生成策略
@javax.persistence.GeneratedIdTable(
name='GEN_TABLE',
table = @Table(name='GENERATOR_TABLE'),
pkColumnName = 'key',
valueColumnName = 'hi'
)
@javax.persistence.TableGenerator(
name='EMP_GEN',
tableName='GEN_TABLE',
pkColumnValue='EMP',
allocationSize=20
)
@javax.persistence.SequenceGenerator(
name='SEQ_GEN',
sequenceName='my_sequence'
)
package org.hibernate.test.metadata;
school和userMember是一对多关系
- import javax.persistence.CascadeType;
- import javax.persistence.Column;
- import javax.persistence.Entity;
- import javax.persistence.FetchType;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- import javax.persistence.OneToMany;
- import javax.persistence.Table;
- import javax.persistence.Temporal;
- import javax.persistence.TemporalType;
- import org.hibernate.annotations.Formula;
- import org.hibernate.annotations.GenericGenerator;
- @Entity
- @Table(name = "school_info")
- public class SchoolInfo implements java.io.Serializable {
- @Id
- @GeneratedValue(generator = "system-uuid")
- @GenericGenerator(name = "system-uuid", strategy = "uuid")
- private String id;//hibernate的uuid机制,生成32为字符串
- @Column(name = "actcodeId", updatable = false, nullable = true, length = 36)
- private String actcodeId;
- @Formula("select COUNT(*) from school_info")
- private int count;
- @Temporal(TemporalType.TIMESTAMP)//不用set,hibernate会自动把当前时间写入
- @Column(updatable = false, length = 20)
- private Date createTime;
- @Temporal(TemporalType.TIMESTAMP)
- private Date updateTime;// 刚开始我默认insertable=false,但会读取出错提示如下:
- // Value '0000-00-00' can not be represented as java.sql.Timestamp
- // mappedBy="school"就相当于inverse=true,(mappedBy指定的是不需要维护关系的一端)
- // 应该注意的是mappedBy值对应@ManyToOne标注的属性,我刚开始写成"schoolId",让我郁闷了好一会
- @OneToMany(mappedBy = "school", cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = UserMember.class)
- // 用范性的话,就不用targetEntity了
- private List users = new ArrayList();
- }
@GeneratedValue(strategy=GenerationType.AUTO)我们常用的自增长机制,我这里采用的是hibernate的uuid生成机制.
需要注意的是import javax.xx.Entity ,而不是org.hibernate.xx.Entity。
郁闷的是我上面用到@Formula,生成的sql竟然是'select COUNT(*) from school_info as formula0_ from school_info schoolinfo0_,当然不能执行了,寻求正解中~!!!!!!!!!
UserMember.java(前面引入的包已经贴过了,下面就不贴了)
- @Entity
- @Table(name = "teacher_info")//实体类和数据库表名不一致时,才用这个
- public class UserMember implements java.io.Serializable {
- @Id
- @GeneratedValue(generator = "system-uuid")
- @GenericGenerator(name = "system-uuid", strategy = "uuid")
- private String id;
- @Column(updatable = false, nullable = false, length = 20)
- private String logonName;
- @Temporal(TemporalType.TIMESTAMP)
- @Column(updatable = false, length = 20)
- private Date createTime;
- @Temporal(TemporalType.TIMESTAMP)
- private Date updateTime;
- @ManyToOne(cascade = { CascadeType.MERGE })
- @JoinColumn(name = "schoolId")
- private SchoolInfo school;
- //注意该类就不用声明schoolId属性了,如果不用@JoinColumn指明关联的字段,hibernate默认会是school_id.
发表评论
-
java 向上转型和向下转型(转载)
2011-11-10 11:18 1014java 转型问题其实并不复杂,只要记住一句话:父类引用指 ... -
Eclipse快捷键大全
2010-02-01 18:07 703终结技:Ctrl+Shift+L 显示所有快捷键 Ctrl+1 ... -
HQB学习
2009-11-06 11:13 1001public void testQBC() { ... -
java读取map集合
2009-10-27 15:33 3687Map<Integer,String> map ... -
正则表达式学习
2009-09-16 11:05 762Java正则表达式详解 ... -
利用javamail包实现的邮件发送功能
2009-08-20 10:53 1570先声明下,以下代码并不是全部由我写出来的,这里还要感谢我的IT ... -
jar的作用
2009-08-19 17:05 1837最小必要包为antlr.jar,cglib.jar,asm.j ... -
hibernate注解
2009-08-19 17:04 874JPA & Hibernate 注解 转自 ... -
JPA & Hibernate 注解
2009-08-05 18:48 826JPA & Hibernate 注解 转自 ... -
rational rose
2009-06-25 15:16 993安装完,rational rose之后,打开安装好ra ... -
tomcat5的优化
2009-06-25 09:54 8161、JDK内存优化: Tomcat默认可以使用的内存为12 ... -
java.lang.ClassNotFoundException: com.tonglian.adm
2009-05-20 10:33 1233原先的工程用的是tomcat1.5但我myeclipse用的是 ... -
Java过滤特殊字符的正则表达式
2009-04-22 15:05 3490// 过滤特殊字符 publi ... -
Java上传
2009-03-27 10:30 967<form action="${baseUrl ...
相关推荐
hibernate 注解 annotation 教程
本篇将深入探讨Hibernate 3版本中的注解使用,帮助开发者理解如何利用注解进行数据持久化,提高开发效率。 一、Hibernate 3简介 Hibernate 3是Hibernate ORM框架的一个重要版本,它引入了许多新特性,如对JPA(Java...
这里面包涵了需要用Hibernate Annotation时,所需要的所有jar包! 现在我们公司在做web项目的时候,已经不用*.hbm.xml这种映射文件了,都是用Annotation(注解)方式来完成实体与表之间的映射关系,这样看起来比用...
3. **Hibernate Annotation**: Hibernate的注解是在Java类和属性上添加元数据的方式,它替代了传统的Hibernate XML配置文件。通过注解,可以在实体类和属性上直接定义数据库映射,如@Entity表示一个数据库表,@Table...
在传统的Hibernate应用中,我们通常使用XML文件来描述对象和表之间的映射关系。然而,随着Java 5的发布,注解成为了一种更简洁、更直观的元数据表示方式。Hibernate注解就是利用这种方式,将对象的映射信息直接写在...
在Hibernate 3.x版本中,引入了Annotation注解,这是一种元数据的方式,可以替代XML配置文件来描述对象与数据库表之间的映射关系。 **Hibernate Annotation注解** 在Hibernate 3.x之前,对象到数据库的映射通常...
hibernate annotation中文文档
**hibernate-annotation-helloworld** 是一个基于Hibernate框架,使用注解方式实现的Hello World示例项目。在Java世界中,Hibernate是一个流行的持久层框架,它极大地简化了数据库操作,尤其是在对象关系映射(ORM)...
《Hibernate-Annotation-3.4.0帮助文档》是一份详尽的指南,旨在帮助开发者理解和使用Hibernate ORM框架中的注解功能。Hibernate是Java领域中广泛使用的对象关系映射(ORM)工具,它极大地简化了数据库操作。在3.4.0...
这篇文档主要讨论的是Hibernate Annotation的使用方法,以及它如何替代传统的XML配置文件(*.hbm.xml)进行对象-关系映射。 **1. Hibernate Annotation简介** Hibernate Annotation是Hibernate框架的一个扩展,它...
Hibernate annotation 3.4 api CHM
Hibernate Annotation
要使用 Hibernate Annotation,您至少需要具备 Hibernate 3.2 和 Java 5。可以从 Hibernate 站点下载 Hibernate 3.2 和 Hibernate Annotation 库。除了标准的 Hibernate JAR 和依赖项之外,您还需要 Hibernate...
综上所述,“最全的Hibernate Annotation API文档”涵盖了从基本的实体映射到复杂的关系映射,再到高级特性的全面知识,是Java开发者学习和使用Hibernate注解的重要参考资料。通过深入理解这些注解,可以更好地掌握...
标题“Hibernate distribution and annotation”涉及到的是Hibernate ORM框架的一个特定版本及其相关的注解功能。Hibernate是一个流行的Java对象关系映射(ORM)工具,它允许开发者使用面向对象的编程模型来操作...
《Hibernate Annotation 中文文档》是Java开发者们的重要参考资料,它详细介绍了如何在Hibernate框架中使用注解进行对象关系映射(ORM)。Hibernate是一款强大的开源Java持久化框架,它简化了数据库与Java对象之间的...
### Struts2+Spring2+Hibernate3+Annotation所需JAR包详解 在Java Web开发领域,Struts2、Spring2和Hibernate3是三个非常重要的框架,它们分别负责Web层、业务逻辑层和服务持久化层的功能实现。为了更好地整合这三...