﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-江城子-随笔分类-hibernate</title><link>http://www.blogjava.net/gkm422/category/27506.html</link><description>十年生死两茫茫，不思量，自难忘。千里孤坟，无处话凄凉。</description><language>zh-cn</language><lastBuildDate>Fri, 23 Nov 2007 06:04:14 GMT</lastBuildDate><pubDate>Fri, 23 Nov 2007 06:04:14 GMT</pubDate><ttl>60</ttl><item><title>Hibernate Annotations笔记</title><link>http://www.blogjava.net/gkm422/archive/2007/11/21/162214.html</link><dc:creator>哀伤血舞</dc:creator><author>哀伤血舞</author><pubDate>Wed, 21 Nov 2007 13:42:00 GMT</pubDate><guid>http://www.blogjava.net/gkm422/archive/2007/11/21/162214.html</guid><wfw:comment>http://www.blogjava.net/gkm422/comments/162214.html</wfw:comment><comments>http://www.blogjava.net/gkm422/archive/2007/11/21/162214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gkm422/comments/commentRss/162214.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gkm422/services/trackbacks/162214.html</trackback:ping><description><![CDATA[注意import javax.xx.Entity ，而不是org.hibernate.xx.Entity。   <br />Descn属性不存在于数据库中，用@Transient 注明   <br />------------------------------------------   <br />1,需要: Hibernate库文件,Hibernate Annotations库,ejb3-persstence.jar(Java 持久化API)   <br />sessionFactory=new AnnotationConfiguration().buildSessionFactory();   <br />------------------------------------------   <br />2,&lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"&gt;   <br />     &lt;property name="annotatedClasses"&gt;   <br />      &lt;list&gt;   <br />        &lt;value&gt;com.onjava.modelplanes.domain.PlaneType&lt;/value&gt;   <br />      &lt;/list&gt;   <br />     &lt;/property&gt;   <br /> &lt;/bean&gt;   <br />------------------------------------------   <br />1,@Entity   <br />@Table(name = "teacher_info")   <br />@IdClass(UUIDHexGenerator.class)    <br />public class UserMember implements java.io.Serializable   <br />2,@entity通过getters/setters方法访问，或直接访问他的成员变量。   <br />@Entity(access = AccessType.PROPERTY)   <br />@Entity(access = AccessType.FIELD)   <br />------------------------------------------   <br />映射标识符   <br />1,@Id   <br />@GeneratedValue(strategy = GenerationType.AUTO)   <br />private String id;   <br />2,@Id(generate=GeneratorType.SEQUENCE, generator='SEQ_STORE')   <br />3,@Id(generate=GeneratorType.IDENTITY)   <br />------------------------------------------   <br />映射属性   <br />1,@Transient   <br />2,@Column(name="PLANE_ID", length=80, nullable=true)   <br />3,@Basic(fetch = FetchType.LAZY)   <br />4,@Serialized 凡标识@Serialized的属性将被序列化   <br />public Country getCountry() { ... }   <br />5,@Lob标识了存储对象可能是个CLOB或者BLOB。   <br />@Lob(type=LobType.CLOB)   <br />public String getFullText(){return fullText;}   <br />@Lob(type = LobType.BLOB)   <br />public byte[] getFullCode() {return fullCode;}   <br />@Version 定义乐观锁机制使用   <br />------------------------------------------   <br />关联关系:   <br />一、一对一:   <br />1,@OneToOne(mappedBy = "address")       <br />public User getUser() {       <br />      return user;       <br />}      <br />1、两边都定义了@OneToOne，但都没有定义mappedBy,则user和address表都会生成到对方的外键，双方都是这个关系的拥有者。    <br />2、两边都定义了@OneToOne，如果user定义了mappedBy，则在address表生成到user的外键，address是这个关系的拥有者；如果address定义   <br />了mappedBy，则在user表生成到address的外键，user是这个关系的拥有者。   <br />   <br />二、一对多,多对一:   <br />2,@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )   <br />3,@OneToMany(mappedBy="planeType",cascade=CascadeType.ALL, fetch=FetchType.EAGER)   <br />@OrderBy("name")   <br />public List&lt;ModelPlane&gt; getModelPlanes() {   <br />    return modelPlanes;   <br />}   <br />其中定义mappedBy的是@OneToMany,也就是说One这一方是关系的拥有者。Many一方的表中生成到关联类的外键。    <br />   <br />三、@ManyToMany     <br />private Set authors = new HashSet&lt;Author&gt;();       <br />@ManyToMany      <br />public Set&lt;Author&gt; getAuthors(){       <br />return authors;       <br />}        <br />      <br />private Set books = new HashSet&lt;Book&gt;();        <br />@ManyToMany(mappedBy="authors")       <br />public Set&lt;Book&gt; getBooks(){       <br />return books;       <br />}       <br />@ManyToMany会生成中间表，具体表名和字段可以通过@AssociationTable来定义，默认的就可以了，同样关系的非拥有者，需要定义mappedBy属性。   <br />------------------------------------------   <br />命名查询   <br />你也可以通过注解,利用@NameQueries和@NameQuery注解,如下:   <br />@NamedQueries(   <br />{    <br />@NamedQuery(name="planeType.findAll",query="select p from PlaneType p" ),   <br />@NamedQuery(name="planeType.delete",query="delete from PlaneType where id=:id" )   <br /> }   <br />)   <br />------------------------------------------   <br />内嵌对象（组件）   <br />@Embedded({   <br />   @AttributeOverride(name='iso2', column = @Column(name='bornIso2') ),   <br />   @AttributeOverride(name='name', column = @Column(name='bornCountryName') )   <br />         })   <br />    Country bornIn;   <br />    ...   <br />}   <br />   <br />@Embeddable(access = AccessType.FIELD)   <br />public class Address implements Serializable {   <br />    String city;   <br />    Country nationality;   <br />}   <br />   <br />   <br />@Embeddable   <br />public class Country implements Serializable {   <br />    private String iso2;   <br />    private String name;   <br />   <br />    public String getIso2() { return iso2; }   <br />    public void setIso2(String iso2) { this.iso2 = iso2; }   <br />   <br />    @Column(name='countryName')   <br />    public String getName() { return name; }   <br />    public void setName(String name) { this.name = name; }   <br />    ...   <br />}   <br />------------------------------------------   <br />自定义的主键生成策略   <br />@javax.persistence.GeneratedIdTable(   <br />   name='GEN_TABLE',   <br />  table = @Table(name='GENERATOR_TABLE'),   <br />    pkColumnName = 'key',   <br />      valueColumnName = 'hi'   <br />)   <br />   <br />@javax.persistence.TableGenerator(   <br />    name='EMP_GEN',   <br />    tableName='GEN_TABLE',   <br />    pkColumnValue='EMP',   <br />    allocationSize=20   <br />)   <br />@javax.persistence.SequenceGenerator(   <br />    name='SEQ_GEN',   <br />    sequenceName='my_sequence'   <br />)   <br />package org.hibernate.test.metadata;   <img src ="http://www.blogjava.net/gkm422/aggbug/162214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gkm422/" target="_blank">哀伤血舞</a> 2007-11-21 21:42 <a href="http://www.blogjava.net/gkm422/archive/2007/11/21/162214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>