作者: gkm422  鏈接:http://remind.javaeye.com/blog/203486  發表時間: 2007年11月21日

聲明:本文系JavaEye網站發布的原創博客文章,未經作者書面許可,嚴禁任何網站轉載本文,否則必將追究法律責任!

注意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;??
本文的討論也很精彩,瀏覽討論>>


JavaEye推薦




文章來源:http://remind.javaeye.com/blog/203486