注意import javax.xx.Entity ,而不是org.hibernate.xx.Entity。??
Descn屬性不存在于數(shù)據(jù)庫(kù)中,用@Transient 注明??
------------------------------------------??
1,需要: Hibernate庫(kù)文件,Hibernate Annotations庫(kù),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通過(guò)getters/setters方法訪問(wèn),或直接訪問(wèn)他的成員變量。??
@Entity(access = AccessType.PROPERTY)??
@Entity(access = AccessType.FIELD)??
------------------------------------------??
映射標(biāo)識(shí)符??
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 凡標(biāo)識(shí)@Serialized的屬性將被序列化??
public Country getCountry() { ... }??
5,@Lob標(biāo)識(shí)了存儲(chǔ)對(duì)象可能是個(gè)CLOB或者BLOB。??
@Lob(type=LobType.CLOB)??
public String getFullText(){return fullText;}??
@Lob(type = LobType.BLOB)??
public byte[] getFullCode() {return fullCode;}??
@Version 定義樂(lè)觀鎖機(jī)制使用??
------------------------------------------??
關(guān)聯(lián)關(guān)系:??
一、一對(duì)一:??
1,@OneToOne(mappedBy = "address")??????
public User getUser() {??????
????? return user;??????
}?????
1、兩邊都定義了@OneToOne,但都沒(méi)有定義mappedBy,則user和address表都會(huì)生成到對(duì)方的外鍵,雙方都是這個(gè)關(guān)系的擁有者。???
2、兩邊都定義了@OneToOne,如果user定義了mappedBy,則在address表生成到user的外鍵,address是這個(gè)關(guān)系的擁有者;如果address定義??
了mappedBy,則在user表生成到address的外鍵,user是這個(gè)關(guān)系的擁有者。??
??
二、一對(duì)多,多對(duì)一:??
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,也就是說(shuō)One這一方是關(guān)系的擁有者。Many一方的表中生成到關(guān)聯(lián)類的外鍵。???
??
三、@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會(huì)生成中間表,具體表名和字段可以通過(guò)@AssociationTable來(lái)定義,默認(rèn)的就可以了,同樣關(guān)系的非擁有者,需要定義mappedBy屬性。??
------------------------------------------??
命名查詢??
你也可以通過(guò)注解,利用@NameQueries和@NameQuery注解,如下:??
@NamedQueries(??
{???
@NamedQuery(name="planeType.findAll",query="select p from PlaneType p" ),??
@NamedQuery(name="planeType.delete",query="delete from PlaneType where id=:id" )??
?}??
)??
------------------------------------------??
內(nèi)嵌對(duì)象(組件)??
@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;??