- 注意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;
Hibernate Annotations筆記
xml 代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.