read-Atleap-9-新聞實體hibernate關係代碼分析

v hibernate一對多關係

    ª 多方做主控方

    ª 多方返回一方的一個實例

    ª 一方返回多方的List

 

v LocalizableContentField類構成了一對多關係,具體實現如下

Ø Localizable中的代碼(一方)

ª xdoclet

/**

* @hibernate.class table="localizable" lazy="false"

 * @hibernate.cache usage="read-write"

 */

ª  /**

     * Returns fields.

     * @return List

     * @hibernate.bag name="fields" inverse="true" lazy="true" cascade="delete"

     * @hibernate.collection-key column="localizable_id"

     * @hibernate.collection-one-to-many

     * class="com.blandware.atleap.model.core.ContentField"

     * 注:LocalizableContentField構成一對多關係,ContentField爲主控方,維護表

     * 關係,採用延遲加載,級聯delete操作,外鍵爲localizable_id

     * hibernate.bag對應JavaList類型

     */

    public List getContentFields() {

        return contentFields;

    }

    public void setContentFields(List contentFields) {

        this.contentFields = contentFields;

    }

    //以下代碼不是必須

    public void addContentField(ContentField contentField) {

        contentField.setOwner(this);

        contentFields.add(contentField);

    }

    public void updateContentField(ContentField contentField) {

        if ( !contentField.getOwner().equals(this) ) {

            contentField.getOwner().contentFields.remove(contentField);

            contentFields.add(contentField);

            contentField.setOwner(this);

        }

    }

    public void removeContentField(ContentField contentField) {

        contentFields.remove(contentField);

    }

Ø ContentField類中對應的代碼(多方)

ª xdoclet

/**

* @struts.form include-all="false" extends="BaseForm"

 * @hibernate.class table="field" lazy="false"

 */

ª  /**

     * Returns the localizable owner

     * @return a localizable

     * @struts.form-field

     * @hibernate.many-to-one column="localizable_id" not-null="true"

     *  outer-join="false"

     */

    public Localizable getOwner() {

        return owner;

    }

    public void setOwner(Localizable owner) {

        this.owner = owner;

    }

v ContentFieldContentFieldValue構成了一對多關係

Ø ContentField類中的代碼

ª xdoclet

/**

* @struts.form include-all="false" extends="BaseForm"

 * @hibernate.class table="field" lazy="false"

 */

ª  /**

     * Returns the list of contentFieldValues dependent on locale.

     * @return List

     * @hibernate.bag name="contentFieldValues" inverse="true" lazy="true"

     * cascade="delete"

     * @hibernate.collection-key column="field_id"

     * @hibernate.collection-one-to-many

     * class="com.blandware.atleap.model.core.ContentFieldValue"

     */

    public List getContentFieldValues() {

        return contentFieldValues;

    }

    public void setContentFieldValues(List contentFieldValues) {

        this.contentFieldValues = contentFieldValues;

    }

Ø ContentFieldValue中的對應代碼

ª Xdoclet

/**

* @struts.form include-all="false" extends="BaseForm"

 * @hibernate.class table="field_value" lazy="false" dynamic-update="true"

* dynamic-insert="true"

 */

ª

    /**

     * Returns the field

     * @return a field

     * @hibernate.many-to-one column="field_id" not-null="false"

     */

    public ContentField getContentField() {

        return contentField;

    }

 

    public void setContentField(ContentField contentField) {

        this.contentField = contentField;

    }

v ContentFieldValue類和ContentLocale構成了多對一關係,代碼略

 

注:

Ø Hibernate  Lazy=true:    Hibernate 使用延長初始化功能。如果不用延長初始化功能,hibernate會將所有關聯表的數據取出,導致一次hibernate操作,多條SQL語句的執行。延長初始化功能使得我們可以在真正索取對象的數據時,纔會從數據庫中查詢。

Ø@hibernate.cache usage="read-write"

使用第2cache

Øinverse:用於標識雙向關聯中的被動方一端。 
 inverse=false
的一方(主控方)負責維護關聯關係.默認值:false 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章