首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Hibernate Annotations 實戰(一):從 hbm.xml 遷移到 Annotations 完整範例

     編輯:Java 相關知識

展示從傳統 hbm.xml 遷移至 JPA Annotations 的完整對照範例。

原版:hbm.xml 映射

三個類別:HibernateUtil、Person、Test(test.hibernate 套件)。

Person.hbm.xml

<hibernate-mapping>
    <class name="test.hibernate.Person" table="person">
        <id name="id" type="integer">
            <column name="id" />
            <generator class="native"/>
        </id>
        <property name="name" type="string"><column name="name"/></property>
        <property name="sex" type="string"><column name="sex"/></property>
        <property name="age" type="integer"><column name="age"/></property>
        <bag name="list" cascade="all">
            <key column="person"/>
            <one-to-many class="test.hibernate.Person"/>
        </bag>
    </class>
</hibernate-mapping>

產生 DDL

CREATE TABLE person (id INTEGER NOT NULL AUTO_INCREMENT, name VARCHAR(255), sex VARCHAR(255), age INTEGER, person INTEGER, PRIMARY KEY (id));
ALTER TABLE person ADD INDEX FKC4E39B5511C4A5C2 (person), ADD CONSTRAINT FKC4E39B5511C4A5C2 FOREIGN KEY (person) REFERENCES person (id);

遷移版:Annotations 映射

僅需三個類別(test.hibernate.annotation 套件),不再需要 hbm.xml。加入 hibernate-annotations.jar、ejb3-persistence.jar 至 classpath。

HibernateUtil - 使用 AnnotationConfiguration

sessionFactory = new AnnotationConfiguration()
    .addPackage("test.hibernate.annotation")
    .addAnnotatedClass(Person.class)
    .configure()
    .buildSessionFactory();

Person 實體類別 - 註解映射

@Entity(access = AccessType.PROPERTY)
@Table
public class Person implements Serializable {
    private Integer id;
    private String name;
    private String sex;
    private Integer age;
    private List list = new LinkedList();

    @Id
    public Integer getId() { return id; }
    public void setId(Integer id) { this.id = id; }

    @Basic
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    @Basic
    public String getSex() { return sex; }
    public void setSex(String sex) { this.sex = sex; }

    @Basic
    public Integer getAge() { return age; }
    public void setAge(Integer age) { this.age = age; }

    @Transient  // 本例不示範集合映射
    public List getList() { return list; }
    public void setList(List list) { this.list = list; }
}

所有屬性使用預設值。Test.java 代碼不變。

執行結果驗證

mysql> DESCRIBE person;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| id     | int(11)      | NO   | PRI | NULL    | auto_increment |
| name   | varchar(255) | YES  |     | NULL    |                |
| sex    | varchar(255) | YES  |     | NULL    |                |
| age    | int(11)      | YES  |     | NULL    |                |
| person | int(11)      | YES  | MUL | NULL    |                |
+--------+--------------+------+-----+---------+----------------+

mysql> SELECT * FROM person;
+----+---------+------+------+--------+
| id | name    | sex  | age  | person |
+----+---------+------+------+--------+
| 1  | icerain | male | 19   | NULL   |
+----+---------+------+------+--------+

結語

遷移到 Annotations 簡化配置,更重要是理解 EJB3 持久化機制、提升開發效率。歡迎回饋交流。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved